diff --git src/wp-includes/js/customize-preview-nav-menus.js src/wp-includes/js/customize-preview-nav-menus.js
index 6745b41be8..5aa9e3d104 100644
--- src/wp-includes/js/customize-preview-nav-menus.js
+++ src/wp-includes/js/customize-preview-nav-menus.js
@@ -21,11 +21,10 @@ wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function(
 		 * Keep track of whether we synced to determine whether or not bindSettingListener
 		 * should also initially fire the listener. This initial firing needs to wait until
 		 * after all of the settings have been synced from the pane in order to prevent
-		 * an infinite selective fallback-refresh. Note that this sync handler will be
-		 * added after the sync handler in customize-preview.js, so it will be triggered
-		 * after all of the settings are added.
+		 * an infinite selective fallback-refresh. Note that the active message is sent
+		 * from the controls once the synced message is sent from the preview.
 		 */
-		api.preview.bind( 'sync', function() {
+		api.preview.bind( 'active', function() {
 			synced = true;
 		} );
 
diff --git src/wp-includes/js/customize-selective-refresh.js src/wp-includes/js/customize-selective-refresh.js
index 4c4fa0d9cf..fedc82390d 100644
--- src/wp-includes/js/customize-selective-refresh.js
+++ src/wp-includes/js/customize-selective-refresh.js
@@ -967,7 +967,19 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 			setting.unbind( handleSettingChange );
 		};
 
-		api.bind( 'add', watchSettingChange );
+		api.preview.bind( 'sync', function( events ) {
+			api.bind( 'add', watchSettingChange );
+
+			// Capture the settings that were modified during loading to trigger change events to trigger selective refresh.
+			if ( events['settings-modified-while-loading'] ) {
+				_.each( _.keys( events['settings-modified-while-loading'] ), function( settingId ) {
+					var setting = api( settingId );
+					if ( setting ) {
+						handleSettingChange.call( setting, setting(), setting() );
+					}
+				} );
+			}
+		} );
 		api.bind( 'remove', unwatchSettingChange );
 		api.each( function( setting ) {
 			setting.bind( handleSettingChange );
