Move File Field storage from public:// to another stream wrapper (like s3://)
For the paths that match across the two servers you can just change the paths in file_managed to start with s3://, clear the caches, and the S3 module will handle the rest. 

This module should be really helpful, I've just written a module for someone which is pretty similar to what you're trying to do (except the files are pruned from the local file system to S3 on a cron) and the module in that link was a great starting point.

Since the S3 module implements a fully functional stream wrapper you can use all of the usual file functions (file_copy, file_move, file_delete, etc) as normal, without having to worry about where the files are.