Not sure if it is relevant but perhpas a bug crept back in related to lazy media. But yeah, get_bytes() should be the answer (assuming there are bytes there).
I have not gone through all of this carefully, but in case it helps, recently I experienced something similar and was able to get around it.
Much of the media in one of my tables was suddenly coming up as having zero bytes. I realized upon closer inspection that it had to do with me updating the media column with a “lazy media object” type. Such objects appear to have some kind of temporary existence. Once I explicitly converted the media to a BlobMedia object before updating, everything updat…