Haha, yes!  Unfortunately, ```Hints.USE_PROVIDED_FID``` is ignored inside the transaction.  Instead, the feature is copied (without the ID), and the ```Hints.PROVIDED_FID``` property is provided.  (In a transaction, the features are first written without their real IDs; only after the transaction is committed are the final IDs associated with the new features.  Not sure why.)  Without modifying GeoTools code, the simplest solution seemed to be to have our writer use the property to fetch the ID that was (will be) intended.

If there's a better way, I'm open to it.