Changing the URL of a WordPress site is well documented here:
However, the documentation does not address an issue in which theme options such as the header image and background image are lost.
There is an excellent explanation of what is causing this in the WordPress forums:
To paraphrase Sayontan Sinha’s comment, if the theme uses the WP Settings API to store options in the database, the options will get encoded using a
type:length:value format. If the new URL differs in length from the old URL, the
length value will need to reflect the accurate character length of the
value. To correct the theme settings, I had to export the
wp_options database table and search each instance of the new URL, then copy the
value string into Word to get the character count and update the
wp_options restored the theme settings.