Index: wp-admin/includes/nav-menu.php
===================================================================
--- wp-admin/includes/nav-menu.php	(revision 38729)
+++ wp-admin/includes/nav-menu.php	(working copy)
@@ -1074,8 +1074,14 @@
 
 	wp_defer_term_counting( false );
 
+	// Backwards compatibility similar to wp-includes/nav-menu.php
+	$menu_data = get_term( $nav_menu_selected_id, '', ARRAY_A );
+	if ( ! empty( $menu_data['name'] ) ) {
+		$menu_data['menu-name'] = $menu_data['name'];
+	}
+
 	/** This action is documented in wp-includes/nav-menu.php */
-	do_action( 'wp_update_nav_menu', $nav_menu_selected_id );
+	do_action( 'wp_update_nav_menu', $nav_menu_selected_id, $menu_data );
 
 	$messages[] = '<div id="message" class="updated notice is-dismissible"><p>' .
 		/* translators: %s: nav menu title */
Index: wp-includes/nav-menu.php
===================================================================
--- wp-includes/nav-menu.php	(revision 38729)
+++ wp-includes/nav-menu.php	(working copy)
@@ -262,7 +262,7 @@
  * @since 3.0.0
  *
  * @param int   $menu_id   The ID of the menu or "0" to create a new menu.
- * @param array $menu_data The array of menu data.
+ * @param array $menu_data The array of menu term metadata.
  * @return int|WP_Error Menu ID on success, WP_Error object on failure.
  */
 function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {
@@ -271,15 +271,23 @@
 
 	$_menu = wp_get_nav_menu_object( $menu_id );
 
+	// Also accept a `menu` key as fallback
+	if ( empty( $menu_data['menu-name'] ) && ! empty( $menu_data['name'] ) ) {
+		$menu_data['menu-name'] = $menu_data['name'];
+	}
+
 	$args = array(
-		'description' => ( isset( $menu_data['description'] ) ? $menu_data['description']  : '' ),
-		'name'        => ( isset( $menu_data['menu-name']   ) ? $menu_data['menu-name']    : '' ),
-		'parent'      => ( isset( $menu_data['parent']      ) ? (int) $menu_data['parent'] : 0  ),
+		'description' => ( ! empty( $menu_data['description'] ) ? $menu_data['description']  : '' ),
+		'name'        => ( ! empty( $menu_data['menu-name']   ) ? $menu_data['menu-name']    : _x( '(unnamed)', 'Missing menu name.' ) ),
+		'parent'      => ( ! empty( $menu_data['parent']      ) ? (int) $menu_data['parent'] : 0  ),
 		'slug'        => null,
 	);
 
+	// backwards compatibility for action hooks
+	$args['menu-name'] = $args['name'];
+
 	// double-check that we're not going to have one menu take the name of another
-	$_possible_existing = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );
+	$_possible_existing = get_term_by( 'name', $args['name'], 'nav_menu' );
 	if (
 		$_possible_existing &&
 		! is_wp_error( $_possible_existing ) &&
@@ -289,7 +297,7 @@
 		return new WP_Error( 'menu_exists',
 			/* translators: %s: menu name */
 			sprintf( __( 'The menu name %s conflicts with another menu name. Please try another.' ),
-				'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
+				'<strong>' . esc_html( $args['name'] ) . '</strong>'
 			)
 		);
 	}
@@ -296,18 +304,18 @@
 
 	// menu doesn't already exist, so create a new menu
 	if ( ! $_menu || is_wp_error( $_menu ) ) {
-		$menu_exists = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );
+		$menu_exists = get_term_by( 'name', $args['name'], 'nav_menu' );
 
 		if ( $menu_exists ) {
 			return new WP_Error( 'menu_exists',
 				/* translators: %s: menu name */
 				sprintf( __( 'The menu name %s conflicts with another menu name. Please try another.' ),
-					'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
+					'<strong>' . esc_html( $args['name'] ) . '</strong>'
 				)
 			);
 		}
 
-		$_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args );
+		$_menu = wp_insert_term( $args['name'], 'nav_menu', $args );
 
 		if ( is_wp_error( $_menu ) )
 			return $_menu;
@@ -318,9 +326,9 @@
 		 * @since 3.0.0
 		 *
 		 * @param int   $term_id   ID of the new menu.
-		 * @param array $menu_data An array of menu data.
+		 * @param array $menu_data An array of menu term metadata currently available.
 		 */
-		do_action( 'wp_create_nav_menu', $_menu['term_id'], $menu_data );
+		do_action( 'wp_create_nav_menu', $_menu['term_id'], $args );
 
 		return (int) $_menu['term_id'];
 	}
@@ -343,9 +351,9 @@
 	 * @since 3.0.0
 	 *
 	 * @param int   $menu_id   ID of the updated menu.
-	 * @param array $menu_data An array of menu data.
+	 * @param array $menu_data An array of menu term metadata currently available.
 	 */
-	do_action( 'wp_update_nav_menu', $menu_id, $menu_data );
+	do_action( 'wp_update_nav_menu', $menu_id, $args );
 	return $menu_id;
 }
 
