Index: src/wp-includes/class-wp-comment-query.php
===================================================================
--- src/wp-includes/class-wp-comment-query.php	(revision 40569)
+++ src/wp-includes/class-wp-comment-query.php	(working copy)
@@ -394,7 +394,11 @@
 		// $args can include anything. Only use the args defined in the query_var_defaults to compute the key.
 		$key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) );
 		$last_changed = wp_cache_get_last_changed( 'comment' );
-
+		// Cache bust if a meta query.
+		if ( ! empty( $args['meta_query'] ) || ! empty( $args['meta_key'] ) ) {
+			$last_changed_meta = wp_cache_get_last_changed( 'comment_meta' );
+			$last_changed .= ":" . $last_changed_meta;
+		}
 
 		$cache_key   = "get_comments:$key:$last_changed";
 		$cache_value = wp_cache_get( $cache_key, 'comment' );
@@ -948,7 +952,11 @@
 
 		$key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) );
 		$last_changed = wp_cache_get_last_changed( 'comment' );
-
+		// Cache bust if a meta query.
+		if ( ! empty( $this->query_vars['meta_query'] ) || ! empty( $this->query_vars['meta_key'] ) ) {
+			$last_changed_meta = wp_cache_get_last_changed( 'comment_meta' );
+			$last_changed .= ":" . $last_changed_meta;
+		}
 		// Fetch an entire level of the descendant tree at a time.
 		$level = 0;
 		$exclude_keys = array( 'parent', 'parent__in', 'parent__not_in' );
Index: src/wp-includes/class-wp-term-query.php
===================================================================
--- src/wp-includes/class-wp-term-query.php	(revision 40569)
+++ src/wp-includes/class-wp-term-query.php	(working copy)
@@ -675,6 +675,11 @@
 		// $args can be anything. Only use the args defined in defaults to compute the key.
 		$key = md5( serialize( wp_array_slice_assoc( $args, array_keys( $this->query_var_defaults ) ) ) . serialize( $taxonomies ) . $this->request );
 		$last_changed = wp_cache_get_last_changed( 'terms' );
+		// Cache bust if a meta query.
+		if ( ! empty( $args['meta_query'] ) || ! empty( $args['meta_key'] ) ) {
+			$last_changed_meta = wp_cache_get_last_changed( 'term_meta' );
+			$last_changed .= ":" . $last_changed_meta;
+		}
 		$cache_key = "get_terms:$key:$last_changed";
 		$cache = wp_cache_get( $cache_key, 'terms' );
 		if ( false !== $cache ) {
Index: src/wp-includes/meta.php
===================================================================
--- src/wp-includes/meta.php	(revision 40569)
+++ src/wp-includes/meta.php	(working copy)
@@ -104,7 +104,9 @@
 
 	$mid = (int) $wpdb->insert_id;
 
-	wp_cache_delete($object_id, $meta_type . '_meta');
+	$cache_group = $meta_type . '_meta';
+	wp_cache_set( 'last_changed', microtime(), $cache_group );
+	wp_cache_delete( $object_id, $cache_group );
 
 	/**
 	 * Fires immediately after meta of a specific type is added.
@@ -248,7 +250,9 @@
 	if ( ! $result )
 		return false;
 
-	wp_cache_delete($object_id, $meta_type . '_meta');
+	$cache_group = $meta_type . '_meta';
+	wp_cache_set( 'last_changed', microtime(), $cache_group );
+	wp_cache_delete( $object_id, $cache_group );
 
 	foreach ( $meta_ids as $meta_id ) {
 		/**
@@ -406,14 +410,17 @@
 	if ( !$count )
 		return false;
 
+	$cache_group = $meta_type . '_meta';
+	wp_cache_set( 'last_changed', microtime(), $cache_group );
 	if ( $delete_all ) {
 		foreach ( (array) $object_ids as $o_id ) {
-			wp_cache_delete($o_id, $meta_type . '_meta');
+			wp_cache_delete( $o_id, $cache_group );
 		}
 	} else {
-		wp_cache_delete($object_id, $meta_type . '_meta');
+		wp_cache_delete( $object_id, $cache_group );
 	}
 
+
 	/**
 	 * Fires immediately after deleting metadata of a specific type.
 	 *
@@ -670,7 +677,9 @@
 			return false;
 
 		// Clear the caches.
-		wp_cache_delete($object_id, $meta_type . '_meta');
+		$cache_group = $meta_type . '_meta';
+		wp_cache_set( 'last_changed', microtime(), $cache_group );
+		wp_cache_delete( $object_id, $cache_group );
 
 		/** This action is documented in wp-includes/meta.php */
 		do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
@@ -746,7 +755,9 @@
 		$result = (bool) $wpdb->delete( $table, array( $id_column => $meta_id ) );
 
 		// Clear the caches.
-		wp_cache_delete($object_id, $meta_type . '_meta');
+		$cache_group = $meta_type . '_meta';
+		wp_cache_set( 'last_changed', microtime(), $cache_group );
+		wp_cache_delete( $object_id, $cache_group );
 
 		/** This action is documented in wp-includes/meta.php */
 		do_action( "deleted_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
Index: src/wp-includes/taxonomy.php
===================================================================
--- src/wp-includes/taxonomy.php	(revision 40569)
+++ src/wp-includes/taxonomy.php	(working copy)
@@ -1130,11 +1130,6 @@
 
 	$added = add_metadata( 'term', $term_id, $meta_key, $meta_value, $unique );
 
-	// Bust term query cache.
-	if ( $added ) {
-		wp_cache_set( 'last_changed', microtime(), 'terms' );
-	}
-
 	return $added;
 }
 
@@ -1156,11 +1151,6 @@
 
 	$deleted = delete_metadata( 'term', $term_id, $meta_key, $meta_value );
 
-	// Bust term query cache.
-	if ( $deleted ) {
-		wp_cache_set( 'last_changed', microtime(), 'terms' );
-	}
-
 	return $deleted;
 }
 
@@ -1212,11 +1202,6 @@
 
 	$updated = update_metadata( 'term', $term_id, $meta_key, $meta_value, $prev_value );
 
-	// Bust term query cache.
-	if ( $updated ) {
-		wp_cache_set( 'last_changed', microtime(), 'terms' );
-	}
-
 	return $updated;
 }
 
