Filter causing loss of _wp_attachment_metadata

Given that that is a filter, it should be returning $metadata instead of returning nothing.

add_filter( 'wp_generate_attachment_metadata', 'mvt_save_photo_credit', 10, 2 );
function mvt_save_photo_credit( $metadata, $attachment_id ) {
    add_post_meta($attachment_id, '_mvt_credit', $metadata['image_meta']['credit'], true);
    return $metadata; // <-- giving back what we got
}

I was able to duplicate the issue you describe, and that small change fixed it.

This only matter for filters down line of this one, but with filters you should (nearly) always return information. You never know what will break if you don’t.