Index: src/wp-includes/user.php
===================================================================
--- src/wp-includes/user.php	(revision 30066)
+++ src/wp-includes/user.php	(working copy)
@@ -715,6 +715,9 @@
 			$qv['blog_id'] = $blog_id = 0; // Prevent extra meta query
 		}
 
+		$meta_query = new WP_Meta_Query();
+		$meta_query->parse_query_vars( $qv );
+
 		$role = '';
 		if ( isset( $qv['role'] ) )
 			$role = trim( $qv['role'] );
@@ -728,14 +731,19 @@
 				$cap_meta_query['compare'] = 'like';
 			}
 
-			if ( empty( $qv['meta_query'] ) || ! in_array( $cap_meta_query, $qv['meta_query'], true ) ) {
-				$qv['meta_query'][] = $cap_meta_query;
+			if ( empty( $meta_query->queries ) ) {
+				$meta_query->queries = array( $cap_meta_query );
+			} elseif ( ! in_array( $cap_meta_query, $meta_query->queries, true ) ) {
+				// Prepend the cap query to the original queries and reparse the query.
+				$meta_query->queries = array(
+					'relation' => 'AND',
+					array( $cap_meta_query, $meta_query->queries ),
+				);
 			}
+
+			$meta_query->parse_query_vars( $meta_query->queries );
 		}
 
-		$meta_query = new WP_Meta_Query();
-		$meta_query->parse_query_vars( $qv );
-
 		if ( !empty( $meta_query->queries ) ) {
 			$clauses = $meta_query->get_sql( 'user', $wpdb->users, 'ID', $this );
 			$this->query_from .= $clauses['join'];
Index: tests/phpunit/tests/user/query.php
===================================================================
--- tests/phpunit/tests/user/query.php	(revision 30066)
+++ tests/phpunit/tests/user/query.php	(working copy)
@@ -221,4 +221,33 @@
 		$query->prepare_query();
 		$this->assertEquals( $_query_vars, $query->query_vars );
 	}
+
+	/**
+	 * @ticket 23849
+	 */
+	function test_meta_query_with_role() {
+		$author_ids = $this->factory->user->create_many( 4, array( 'role' => 'author' ) );
+
+		add_user_meta( $author_ids[0], 'foo', 'bar' );
+		add_user_meta( $author_ids[1], 'foo', 'baz' );
+
+		// Users with foo = bar or baz restricted to the author role.
+		$query = new WP_User_Query( array(
+			'fields' => '',
+			'role' => 'author',
+			'meta_query' => array(
+				'relation' => 'OR',
+				array(
+					'key' => 'foo',
+					'value' => 'bar',
+				),
+				array(
+					'key' => 'foo',
+					'value' => 'baz',
+				),
+			),
+		) );
+
+		$this->assertEquals( array( $author_ids[0], $author_ids[1] ), $query->get_results() );
+	}
 }
