diff --git src/wp-admin/js/customize-controls.js src/wp-admin/js/customize-controls.js
index d13c9d17c6..3c8a928e06 100644
--- src/wp-admin/js/customize-controls.js
+++ src/wp-admin/js/customize-controls.js
@@ -8381,9 +8381,22 @@
 
 		// Handle exiting of Customizer.
 		(function() {
-			var isInsideIframe = false;
+			var isInsideIframe = false, changesSinceSave = 0;
+
+			api.bind( 'change', function() {
+				changesSinceSave += 1;
+			} );
+			api.bind( 'save', function() {
+				changesSinceSave = 0;
+			} );
 
 			function isCleanState() {
+
+				// Handle special case of previewing theme switch since some settings (for nav menus and widgets) are pre-dirty.
+				if ( ! api.state( 'activated' ).get() ) {
+					return 0 === changesSinceSave;
+				}
+
 				return api.state( 'saved' ).get() && 'auto-draft' !== api.state( 'changesetStatus' ).get();
 			}
 
