Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 57489)
+++ wp-includes/user.php	(working copy)
@@ -2367,11 +2367,23 @@
 		return new WP_Error( 'empty_data', __( 'Not enough data to create this user.' ) );
 	}
 
+	$do_update = false;
 	if ( $update ) {
+
 		if ( $user_email !== $old_user_data->user_email || $user_pass !== $old_user_data->user_pass ) {
 			$data['user_activation_key'] = '';
 		}
-		$wpdb->update( $wpdb->users, $data, array( 'ID' => $user_id ) );
+
+		foreach ( $data as $key => $value ) {
+			if ( isset( $old_user_data->{$key} ) && $old_user_data->{$key} !== $value ) {
+				$do_update = true;
+				break;
+			}
+		}
+
+		if ( $do_update ) {
+			$wpdb->update( $wpdb->users, $data, array( 'ID' => $user_id ) );
+		}
 	} else {
 		$wpdb->insert( $wpdb->users, $data );
 		$user_id = (int) $wpdb->insert_id;
@@ -2472,7 +2484,9 @@
 		 * @param WP_User $old_user_data Object containing user's data prior to update.
 		 * @param array   $userdata      The raw array of data passed to wp_insert_user().
 		 */
-		do_action( 'profile_update', $user_id, $old_user_data, $userdata );
+		if ( $do_update ) {
+			do_action( 'profile_update', $user_id, $old_user_data, $userdata );
+		}
 
 		if ( isset( $userdata['spam'] ) && $userdata['spam'] != $old_user_data->spam ) {
 			if ( 1 == $userdata['spam'] ) {
