Yeah, it's a little hard to summarize. Basically, I've got both imagefield and audiofield turned on. audiofield is storing audio information via filefield_meta. Imagefield is storing alt text (and other fields) via the serialized field_image_data column.
When the field goes through filefield_field_sanitize, it gets sent through field_file_load, which in turn calls filefield_meta_file_load - which returns a field with a 'data' element that is already an array. When, later on, the filefield_field_sanitize tries to check and see if $items[$delta]['data'] needs to be unserialized, it doesn't, because the serialized array that was there at the beginning of the loop has been replaced by the array from filefield_meta_file_load - and so you lose the data. My change checks to see if the old 'data' information is still there from the $item variable, unserializes it, and adds it to the data from filefield_meta. I don't have a patch on hand yet, as I'm still mucking about and removing my debug calls from checking to see where the data was disappearing!