Using field_create_instance(), db_set_active() and node_save() in conjunction
I've figured out a solution to this, although I'm not sure if it's the best performance wise. It would seem that even after switching database with db_set_active(), node_save() (and presumably any other field&lt;>database operations) will continue to use the field info as defined beforehand, so even if you've specified a value for a field that only exists in the second database, it will assume the field doesn't exist. Using field_info_cache_clear() right after db_set_active() solves the problem.

Obviously clearing any cache in a hook like this sort of defeats the purpose of the cache; fortunately in my case it won't be necessary too often.

If anyone knows of a better way of handling it without clearing any caches or creating the field on both/all sites, I'd love to know. I won't mark this as the accepted answer for the time being.