Paypal express checkout doesn't add taxes
It seems that Ubercart doesn't set the billing address properly after making the API call. See uc_paypal.pages.inc around line 240.

The original snippet looked like this:

$order-&gt;delivery_street1 = check_plain($nvp_response['SHIPTOSTREET']);
$order-&gt;delivery_street2 = isset($nvp_response['SHIPTOSTREET2']) ? check_plain($nvp_response['SHIPTOSTREET2']) : '';
$order-&gt;delivery_city = check_plain($nvp_response['SHIPTOCITY']);
$order-&gt;delivery_zone = !empty($zone_id) ? $zone_id : 0;
$order-&gt;delivery_postal_code = check_plain($nvp_response['SHIPTOZIP']);
$order-&gt;delivery_country = !empty($country_id) ? $country_id : 840;

$order-&gt;billing_first_name = check_plain($nvp_response['FIRSTNAME']);
$order-&gt;billing_last_name = check_plain($nvp_response['LASTNAME']);
$order-&gt;billing_street1 = check_plain($nvp_response['EMAIL']);


You can see that the billing address is never added. I would assume that most people who experience this issue have the tax calculating by the user's state. Since there's no state, no tax is added. Since the billing address and delivery address will be the same on Paypal, simply add the delivery info into the billing info like so:

$order-&gt;billing_street1 = check_plain($nvp_response['SHIPTOSTREET']);
$order-&gt;billing_street2 = isset($nvp_response['SHIPTOSTREET2']) ? check_plain($nvp_response['SHIPTOSTREET2']) : '';
$order-&gt;billing_city = check_plain($nvp_response['SHIPTOCITY']);
$order-&gt;billing_zone = !empty($zone_id) ? $zone_id : 0;
$order-&gt;billing_postal_code = check_plain($nvp_response['SHIPTOZIP']);
$order-&gt;billing_country = !empty($country_id) ? $country_id : 840;


Hacking core/contrib modules like this sucks and I don't recommend it, but sometimes, you gotta do what you gotta do.

Enjoy your taxes!