Index: wp-admin/menu.php
--- wp-admin/menu.php Base (BASE)
+++ wp-admin/menu.php Locally Modified (Based On LOCAL)
@@ -123,7 +123,17 @@
 	// Check if it should be a submenu.
 	if ( $ptype_obj->show_in_menu !== true )
 		continue;
-	$ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; // If we're to use $_wp_last_object_menu, increment it first.
+
+	// Adjust the position if it's already occupied
+	if ( is_int( $ptype_obj->menu_position ) && ( $ptype_obj->menu_position == $_wp_last_object_menu ) ) {
+		$ptype_menu_position = $ptype_obj->menu_position;
+		$_wp_last_object_menu++;
+	} elseif ( is_int( $ptype_obj->menu_position ) && isset( $menu[$ptype_obj->menu_position] ) ) {
+		$ptype_menu_position = $ptype_obj->menu_position + 1;
+	} else {
+		$ptype_menu_position = $ptype_obj->menu_position;
+	}
+
 	$ptype_for_id = sanitize_html_class( $ptype );
 	if ( is_string( $ptype_obj->menu_icon ) ) {
 		$menu_icon   = esc_url( $ptype_obj->menu_icon );
