I am having a similar problem with updating the post_date and post_date_gmt. I am using wp_insert_post to create classified ads and then updating them with their actual publication date using wp_update_post.
The documentation says that it will return the id of the post it is successful. In my case it is returning the ID, but it the publication date is still current date.
$id = wp_insert_post( $postObj );
$post_date = date("Y-m-d H:i:s", strtotime($start_date));
$post_date_gmt = date('Y-m-d H:i:s',strtotime($start_date . " +5 hours" ));
$my_updated_post = array();
$my_updated_post['ID'] = $id;
$my_updated_post['post_date'] = $post_date;
$my_updated_post['post_date_gmt'] = $post_date_gmt;
$my_updated_post['post_status'] = 'publish';
print_r($my_updated_post);
$update_id = wp_update_post( $my_updated_post );
echo("update id = $update_id<hr />\n");