Images uploaded on frontend display correctly but not in media editor.

It appears you’ve taken the super long winded route and done each step of the upload manually.

But why not use the sideloading function that does it all for you? The majority of your code can be replaced with this:

// These files need to be included as dependencies when on the front end.
require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );

$attach_id = media_handle_upload( 'featured_image', $new_job_id );
if ( is_wp_error( $attach_id ) ) {
    // There was an error uploading the image.
} else {
    // The image was uploaded successfully!
}

From there you can set your post thumbnail etc, look up the documentation for media_handle_upload for more details, and remember to add a nonce check to your uploader or your site will probably get hacked