Index: wp-admin/includes/class-wp-upgrader.php
===================================================================
--- wp-admin/includes/class-wp-upgrader.php	(revision 21131)
+++ wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -1055,13 +1055,13 @@
 		if ( is_wp_error($working_dir) )
 			return $working_dir;
 
-		// Copy update-core.php from the new version into place.
+/*		// Copy update-core.php from the new version into place.
 		if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) {
 			$wp_filesystem->delete($working_dir, true);
 			return new WP_Error('copy_failed', $this->strings['copy_failed']);
 		}
 		$wp_filesystem->chmod($wp_dir . 'wp-admin/includes/update-core.php', FS_CHMOD_FILE);
-
+*/
 		require(ABSPATH . 'wp-admin/includes/update-core.php');
 
 		if ( ! function_exists( 'update_core' ) )
Index: wp-admin/includes/update-core.php
===================================================================
--- wp-admin/includes/update-core.php	(revision 21130)
+++ wp-admin/includes/update-core.php	(working copy)
@@ -398,6 +398,31 @@
 );
 
 /**
+ * Stores locale files to be deleted.
+ *
+ * @since 3.5.0
+ * @global array $_old_locale_files
+ * @var array
+ * @name $_old_locale_files
+ */
+global $_old_locale_files;
+
+$_old_locale_files = array(
+	// 3.4
+	'sv_SE.php',
+	'pl_PL.php',
+	'ar.php',
+	'id_ID.php',
+	'nb_NO.php',
+	'fi.php',
+	'en_CA.php',
+	'nn_NO.php',
+	'eo.php',
+	'ckb.php',
+	'pt_BR.php',
+);
+
+/**
  * Stores new files in wp-content to copy
  *
  * The contents of this array indicate any new bundled plugins/themes which
@@ -469,7 +494,7 @@
  * @return WP_Error|null WP_Error on failure, null on success.
  */
 function update_core($from, $to) {
-	global $wp_filesystem, $_old_files, $_new_bundled_files, $wpdb;
+	global $wp_filesystem, $_old_files, $_old_locale_files, $_new_bundled_files, $wpdb;
 
 	@set_time_limit( 300 );
 
@@ -518,31 +543,35 @@
 	$wp_filesystem->put_contents($maintenance_file, $maintenance_string, FS_CHMOD_FILE);
 
 	// Copy new versions of WP files into place.
-	$result = _copy_dir($from . $distro, $to, array('wp-content') );
+	$result = true; // @DEBUG _copy_dir($from . $distro, $to, array('wp-content') );
 
 	// Custom Content Directory needs updating now.
 	// Copy Languages
-	if ( !is_wp_error($result) && $wp_filesystem->is_dir($from . $distro . 'wp-content/languages') ) {
+	if ( !is_wp_error($result) ) {
 		if ( WP_LANG_DIR != ABSPATH . WPINC . '/languages' || @is_dir(WP_LANG_DIR) )
 			$lang_dir = WP_LANG_DIR;
 		else
 			$lang_dir = WP_CONTENT_DIR . '/languages';
+	
+		if ( $wp_filesystem->is_dir($from . $distro . 'wp-content/languages') ) {
+			if ( !@is_dir($lang_dir) && 0 === strpos($lang_dir, ABSPATH) ) { // Check the language directory exists first
+				$wp_filesystem->mkdir($to . str_replace(ABSPATH, '', $lang_dir), FS_CHMOD_DIR); // If it's within the ABSPATH we can handle it here, otherwise they're out of luck.
+				clearstatcache(); // for FTP, Need to clear the stat cache
+			}
 
-		if ( !@is_dir($lang_dir) && 0 === strpos($lang_dir, ABSPATH) ) { // Check the language directory exists first
-			$wp_filesystem->mkdir($to . str_replace(ABSPATH, '', $lang_dir), FS_CHMOD_DIR); // If it's within the ABSPATH we can handle it here, otherwise they're out of luck.
-			clearstatcache(); // for FTP, Need to clear the stat cache
+			if ( @is_dir($lang_dir) ) {
+				$wp_lang_dir = $wp_filesystem->find_folder($lang_dir);
+				if ( $wp_lang_dir )
+					$result = copy_dir($from . $distro . 'wp-content/languages/', $wp_lang_dir);
+			}
+		} elseif ( @is_dir( $lang_dir ) ) {
+			$wp_lang_dir = $wp_filesystem->find_folder( $lang_dir );
 		}
-
-		if ( @is_dir($lang_dir) ) {
-			$wp_lang_dir = $wp_filesystem->find_folder($lang_dir);
-			if ( $wp_lang_dir )
-				$result = copy_dir($from . $distro . 'wp-content/languages/', $wp_lang_dir);
-		}
 	}
 
 	// Copy New bundled plugins & themes
 	// This gives us the ability to install new plugins & themes bundled with future versions of WordPress whilst avoiding the re-install upon upgrade issue.
-	if ( !is_wp_error($result) && ( ! defined('CORE_UPGRADE_SKIP_NEW_BUNDLED') || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) {
+	if ( false ) { // @DEBUG !is_wp_error($result) && ( ! defined('CORE_UPGRADE_SKIP_NEW_BUNDLED') || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) {
 		$old_version = $GLOBALS['wp_version']; // $wp_version in local scope == new version
 		foreach ( (array) $_new_bundled_files as $file => $introduced_version ) {
 			// If $introduced version is greater than what the site was previously running
@@ -591,6 +620,15 @@
 		$wp_filesystem->delete($old_file, true);
 	}
 
+	if ( ! empty( $wp_lang_dir ) ) {
+		foreach ( $_old_locale_files as $old_file ) {
+			$old_file = $wp_lang_dir . $old_file;
+			if ( ! $wp_filesystem->exists( $old_file ) )
+				continue;
+			$wp_filesystem->delete( $old_file, true );
+		}
+	}
+
 	// Upgrade DB with separate request
 	apply_filters('update_feedback', __('Upgrading database&#8230;'));
 	$db_upgrade_url = admin_url('upgrade.php?step=upgrade_db');
