Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(revision 17025)
+++ wp-admin/includes/plugin.php	(working copy)
@@ -455,6 +455,21 @@
 }
 
 /**
+ * Check whether the plugin is not network activated.
+ *
+ * Reverse of is_plugin_inactive_for_network(). Used as a callback.
+ *
+ * @since 3.1.1
+ * @see is_plugin_inactive_for_network()
+ *
+ * @param string $plugin Base plugin path from plugins directory.
+ * @return bool True if inactive. False if active.
+ */
+function is_plugin_inactive_for_network( $plugin ) {
+	return ! is_plugin_active_for_network( $plugin );
+}
+
+/**
  * Checks for "Network: true" in the plugin header to see if this should
  * be activated only as a network wide plugin. The plugin would also work
  * when Multisite is not enabled.
Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 17025)
+++ wp-admin/plugins.php	(working copy)
@@ -195,7 +195,12 @@
 
 			//$_POST = from the plugin form; $_GET = from the FTP details screen.
 			$plugins = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();
-			$plugins = array_filter($plugins, 'is_plugin_inactive'); // Do not allow to delete Activated plugins.
+
+			if ( ! is_network_admin() )
+				$plugins = array_filter( $plugins, 'is_plugin_inactive' ); // Do not allow to delete Activated plugins.
+			else
+				$plugins = array_filter( $plugins, 'is_plugin_inactive_for_network' ); // Do not allow to delete Network Activated plugins.
+
 			if ( empty($plugins) ) {
 				wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") );
 				exit;
