Index: wp-admin/admin.php
===================================================================
--- wp-admin/admin.php	(revision 20523)
+++ wp-admin/admin.php	(working copy)
@@ -67,6 +67,10 @@
 
 nocache_headers();
 
+if( is_multisite() ) {
+	invalid_site_admin_redirect();
+}
+
 // Schedule trash collection
 if ( !wp_next_scheduled('wp_scheduled_delete') && !defined('WP_INSTALLING') )
 	wp_schedule_event(time(), 'daily', 'wp_scheduled_delete');
Index: wp-admin/includes/ms.php
===================================================================
--- wp-admin/includes/ms.php	(revision 20523)
+++ wp-admin/includes/ms.php	(working copy)
@@ -742,3 +742,35 @@
 	$count = get_blog_count();
 	return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count );
 }
+
+function invalid_site_admin_redirect() {
+	
+	global $current_blog;
+	
+	# Unless admin_url (minus hostname) matches base of current URL (up to wp-admin), redirect to canonical URL
+	if( preg_match( '|^http(s?)\://([^/]+)/(([^/]+/)*)wp-admin|', get_admin_url(), $canon_uri_match ) && 
+		preg_match( '|^/(([^/]+/)*)wp-admin/(.*?)$|', $_SERVER['REQUEST_URI'], $requested_uri_match ) ) {
+		
+		if( $canon_uri_match[3] != $requested_uri_match[1] ) {
+
+			wp_redirect( 
+				add_query_arg( 
+					array( 'error' => 'invalid_site' ), 
+					get_admin_url($current_blog->blog_id, $requested_uri_match[3])
+				) 
+			);
+			
+		}
+	}
+	
+	if( isset( $_GET['error'] ) && $_GET['error'] == 'invalid_site' ) {
+		/** We have no idea what invalid page was requested, so fire this notice for all admin pages */
+		add_action( 'all_admin_notices', 'invalid_site_admin_notice' );
+	}
+	
+}
+
+function invalid_site_admin_notice() {
+	echo '<div class="update-nag">' . __('You were redirected here because you requested the dashboard for a site that does not exist.') . '</div>';
+}
+
