If I remove the line items and manually key them, ...
# taxes
t
If I remove the line items and manually key them, the Tax Codes are correctly filled in. I'm relatively sure we don't have any custom code or workflows getting in the way.
Solution found: this was a self-inflicted wound. In a poorly-designed plan to get rid of a problem with the Tax Code field being "required when it should not be" we disabled the Tax Code field on our Order Confirmation custom form. The problem isn't at Invoice time after all. This caused Tax Codes to be empty on the Order Confirmation, regardless of the taxability of the line items. This means a transform of the OC to Invoice was behaving precisely "as intended" because there was never a Tax Code value on the OC in the first place. We have enabled the Tax Code field in our custom form and will do some further review to ensure the Nexus settings are actually valid.