To update the featured image preview we need to manually modify the image in the `core` state. Though, there is no direct mechanism to also invalidate its cache and re-render the preview. As a workaround, we call `receiveEntityRecords`, normally used to update the state after a fetch, which has a handy `invalidateCache` parameter that does exactly what we need.
function updateFeaturedImagePreview( image ) {
		const currentImageId = select( 'core/editor' ).getEditedPostAttribute( 'featured_media' );
		if ( currentImageId !== image.id ) {
			return;
		}
		preloadImage( image.url ).then( () => {
			const currentImage = select( 'core' ).getMedia( currentImageId );
			const updatedImage = {
				...currentImage,
				media_details: {
					height: image.height,
					width: image.width,
				},
				source_url: image.url,
			};
			dispatch( 'core' ).receiveEntityRecords( 'root', 'media', [ updatedImage ], null, true );
		} );
	}