Index: src/wp-admin/includes/class-wp-upgrader.php
===================================================================
--- src/wp-admin/includes/class-wp-upgrader.php	(revision 25755)
+++ src/wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -1298,8 +1298,19 @@
 
 		$result = update_core( $working_dir, $wp_dir );
 
+		$try_rollback = false;
+		if ( is_wp_error( $result ) ) {
+			$try_rollback = true;
+		} else {
+			$site_test = $this->test_if_site_is_ok();
+			if ( is_wp_error( $site_test ) ) {
+				$result = $site_test;
+				$try_rollback = true;
+			}
+		}
+
 		// In the event of an error, rollback to the previous version
-		if ( is_wp_error( $result ) && $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) {
+		if ( $try_rollback && $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) {
 			apply_filters( 'update_feedback', $result );
 			apply_filters( 'update_feedback', $this->strings['start_rollback'] );
 
@@ -1339,6 +1350,10 @@
 			}
 		}
 
+		// Don't upgrade if we can't verify that the site is OK
+		if ( true !== $this->test_if_site_is_ok() )
+			return false;
+
 		// 1: If we're already on that version, not much point in updating?
 		if ( $offered_ver == $wp_version )
 			return false;
@@ -1366,6 +1381,24 @@
 		return false;
 	}
 
+	function test_if_site_is_ok() {
+		// Is the Admin ajax handler returning what we expect of it? 
+		$http_result = wp_remote_post( admin_url( 'admin-ajax.php?action=test-upgrade-OK' ), array( 'timeout' => 10 ) );
+		$admin_ok = ( 'OK' === wp_remote_retrieve_body( $http_result ) );
+
+		if ( ! $admin_ok )
+			return new WP_Error( 'admin_check_failed', __(''), wp_remote_retrieve_body( $http_result ) );
+
+		// Is the front-end returning what we'd expect of it? (Note, This is a filter on template_redirect)
+		$http_result = wp_remote_post( site_url( '?test-upgrade-OK=1' ), array( 'timeout' => 10 ) );
+		$front_ok = ( 'OK' === wp_remote_retrieve_body( $http_result ) );
+
+		if ( ! $front_ok )
+			return new WP_Error( 'site_check_failed', __(''), wp_remote_retrieve_body( $http_result ) );
+
+		return true;
+	}
+
 	function check_files() {
 		global $wp_version;
 
Index: src/wp-includes/update.php
===================================================================
--- src/wp-includes/update.php	(revision 25755)
+++ src/wp-includes/update.php	(working copy)
@@ -521,6 +521,10 @@
 	wp_update_themes();
 }
 
+function site_is_OK_callback() {
+	die( 'OK' );
+}
+
 /**
  * Schedule core, theme, and plugin update checks.
  *
@@ -562,7 +566,14 @@
 add_action( 'wp_update_themes', 'wp_update_themes' );
 add_action( 'upgrader_process_complete', 'wp_update_themes' );
 
+add_action('init', 'wp_schedule_update_checks');
+
 // Automatic Updates - Cron callback
 add_action( 'wp_auto_updates_maybe_update', 'wp_auto_updates_maybe_update' );
 
-add_action('init', 'wp_schedule_update_checks');
+// Automatic Updates - Site is OK callbacks
+if ( isset( $_GET['test-upgrade-OK'] ) )
+	add_action( 'template_redirect', 'site_is_OK_callback' );
+
+add_action( 'wp_ajax_test-upgrade-OK', 'site_is_OK_callback' );
+add_action( 'wp_ajax_nopriv_test-upgrade-OK', 'site_is_OK_callback' );
