The source_id of the object is defined to NULL in the database after the user saves changes to an object, even if not changing the source_id value, just as long as the source_id field is in the current screen being saved.
This happens because the form element is submited as follows:
Content-Disposition: form-data; name="source_id"
Instead of the placement_code+form_prefix+field_name pattern every other field seems to follow, instrisic or not.
The root of this problem I believe is in the way the field (source_id) is rendered, with the wrong select html element name.
Merged your fixes. Thanks!