diff --git src/wp-includes/class-wp-xmlrpc-server.php src/wp-includes/class-wp-xmlrpc-server.php
index c331591..c21afb6 100644
--- src/wp-includes/class-wp-xmlrpc-server.php
+++ src/wp-includes/class-wp-xmlrpc-server.php
@@ -5362,16 +5362,24 @@ class wp_xmlrpc_server extends IXR_Server {
 		elseif ( !empty( $content_struct['dateCreated']) )
 			$dateCreated = $content_struct['dateCreated']->getIso();
 
+		// We need to pass along a value to wp_update_post for "edit_date", indicating whether
+		// an intentional edit is being made to the date. This drives logic that determines
+		// whether the value of post_date or post_date_gmt will be disregarded or not for
+		// draft posts.
+		$edit_date = false;
 		if ( !empty( $dateCreated ) ) {
 			$post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated));
 			$post_date_gmt = iso8601_to_datetime($dateCreated, 'GMT');
+
+			// If $dateCreated is not empty, it means that a specific date was supplied.
+			$edit_date = true;
 		} else {
 			$post_date     = $postdata['post_date'];
 			$post_date_gmt = $postdata['post_date_gmt'];
 		}
 
 		// We've got all the data -- post it.
-		$newpost = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'post_date', 'post_date_gmt', 'to_ping', 'post_name', 'post_password', 'post_parent', 'menu_order', 'post_author', 'tags_input', 'page_template');
+		$newpost = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'edit_date', 'post_date', 'post_date_gmt', 'to_ping', 'post_name', 'post_password', 'post_parent', 'menu_order', 'post_author', 'tags_input', 'page_template');
 
 		$result = wp_update_post($newpost, true);
 		if ( is_wp_error( $result ) )
diff --git tests/phpunit/tests/xmlrpc/mw/editPost.php tests/phpunit/tests/xmlrpc/mw/editPost.php
index a62d239..8c26522 100644
--- tests/phpunit/tests/xmlrpc/mw/editPost.php
+++ tests/phpunit/tests/xmlrpc/mw/editPost.php
@@ -241,4 +241,33 @@ class Tests_XMLRPC_mw_editPost extends WP_XMLRPC_UnitTestCase {
 		$tags2 = get_the_tags( $post_id );
 		$this->assertEmpty( $tags2 );
 	}
+
+	/**
+	 * @ticket 35874
+	 */
+	function test_draft_not_prematurely_published() {
+		$editor_id = $this->make_user_by_role( 'editor' );
+
+		$post = array (
+			'title' => 'Title'
+		);
+
+		// We have to use mw_newPost method, rather than the factory
+		// post->create method to create the database conditions that exhibit the bug.
+		$post_id = $this->myxmlrpcserver->mw_newPost( array( 1, 'editor', 'editor', $post ) );
+
+		// Change the post's status to publish and date to future
+		$future_time = strtotime( '+1 day' );
+		$future_date = new IXR_Date( $future_time );
+		$this->myxmlrpcserver->mw_editPost( array( $post_id, 'editor', 'editor', array(
+			'dateCreated' => $future_date,
+			'post_status' => 'publish'
+		) ) );
+
+ 		$after = get_post( $post_id );
+		$this->assertEquals( 'future', $after->post_status );
+
+		$future_date_string = strftime( "%Y-%m-%d %H:%M:%S", $future_time );
+		$this->assertEquals( $future_date_string, $after->post_date );
+	}
 }
