Logged as
DEV-4705.
At some point we introduced a property to the document class named "FileBinaryChanged". This was done for performance reasons - why save a potentially huge binary to the database if it hadn't actually changed? (maybe only the document Description was changed). Only when the FileBinary property is set for a document does FileBinaryChanged get set to true.
Now when a copy is performed, we simply generate a new RecID for a document and set it's InsertFlag to true. Voila. Copied. Unfortunately, we must have failed to update the copy method for documents when we introduced the FileBinaryChanged flag, so the copy does not push the file binary to the database upon save because we failed to set FileBinaryChanged to true during the copy process.
I've attached a plugin to workaround this issue. It simply sets FileBinaryChanged to true for all documents in the sales order copy end event: