Index: src/wp-admin/includes/class-wp-upgrader.php
===================================================================
--- src/wp-admin/includes/class-wp-upgrader.php	(revision 25653)
+++ src/wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -1299,13 +1299,13 @@
 		$result = update_core( $working_dir, $wp_dir );
 
 		// In the event of an error, rollback to the previous version
-		if ( is_wp_error( $result ) && $parsed_args['attempt_rollback'] && $current->packages->rollback ) {
+		if ( is_wp_error( $result ) && $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) {
 			apply_filters( 'update_feedback', $result );
 			apply_filters( 'update_feedback', $this->strings['start_rollback'] );
 
-			$this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) );
+			$rollback_result = $this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) );
 
-			$result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'] );
+			$result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'], array( 'rollback' => $rollback_result, 'update' => $result ) );
 		}
 		do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core' ), $result );
 		return $result;
@@ -1717,14 +1717,24 @@
 
 		// Next, Process any core upgrade
 		wp_version_check(); // Check for Core updates
+		$extra_update_args = array();
 		$core_update = find_core_auto_update();
 		if ( $core_update ) {
-			self::upgrade( 'core', $core_update );
+			$start_time = time();
+			$core_update_result = self::upgrade( 'core', $core_update );
 			delete_site_transient( 'update_core' );
+			$extra_update_args['success'] = is_wp_error( $core_update_result ) ? $core_update_result->get_error_code() : true;
+			if ( is_wp_error( $core_update_result ) && 'rollback_was_required' == $core_update_result->get_error_code() ) {
+				$rollback_data = $core_update_result->get_error_data();
+				$extra_update_args['update'] = is_wp_error( $rollback_data['update'] ) ? $rollback_data['update']->get_error_code() : $rollback_data['update'];
+				$extra_update_args['rollback'] = is_wp_error( $rollback_data['rollback'] ) ? $rollback_data['rollback']->get_error_code() : $rollback_data['rollback'];
+			}
+			$extra_update_args['fs_transport'] = $GLOBALS['wp_filesystem']->method;
+			$extra_update_args['time_taken'] = ( time() - $start_time );
 		}
 
 		// Cleanup, and check for any pending translations
-		wp_version_check();  // check for Core updates
+		wp_version_check( $extra_update_args );  // check for Core updates
 		wp_update_themes();  // Check for Theme updates
 		wp_update_plugins(); // Check for Plugin updates
 
Index: src/wp-includes/update.php
===================================================================
--- src/wp-includes/update.php	(revision 25653)
+++ src/wp-includes/update.php	(working copy)
@@ -19,7 +19,7 @@
  *
  * @return mixed Returns null if update is unsupported. Returns false if check is too soon.
  */
-function wp_version_check() {
+function wp_version_check( $extra_args = array() ) {
 	if ( defined('WP_INSTALLING') )
 		return;
 
@@ -39,7 +39,7 @@
 	// Wait 60 seconds between multiple version check requests
 	$timeout = 60;
 	$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
-	if ( $time_not_changed )
+	if ( $time_not_changed && empty( $extra_args ) )
 		return false;
 
 	$locale = apply_filters( 'core_version_check_locale', get_locale() );
@@ -74,8 +74,9 @@
 		'local_package'     => isset( $wp_local_package ) ? $wp_local_package : '',
 		'blogs'             => $num_blogs,
 		'users'             => $user_count,
-		'multisite_enabled' => $multisite_enabled
+		'multisite_enabled' => $multisite_enabled,
 	);
+	$query = array_merge( $query, $extra_args );
 
 	$url = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, null, '&' );
 	if ( wp_http_supports( array( 'ssl' ) ) )
