Thank you for the quick reply!

I narrowed down the problem to this line
$_SESSION['cart']->free_shipping_prices()
returning $0.

I double checked in the Admin>Catalog that I have this product marked as virtual. Also I checked the SQL database to make sure 'virtual_product' was equal to 1.

Then, when going through the price calculation code for zen cart (in shopping_cart.php), I found this comment:
// appears to confuse products priced by attributes

This product IS priced by attribute, so I'm thinking the problem is related to that issue.