Index: wp-includes/revision.php
===================================================================
--- wp-includes/revision.php	(revision 23842)
+++ wp-includes/revision.php	(working copy)
@@ -446,7 +446,7 @@
 
 
 function _set_preview($post) {
-
+	global $post_preview_id;
 	if ( ! is_object($post) )
 		return $post;
 
@@ -460,10 +460,52 @@
 	$post->post_content = $preview->post_content;
 	$post->post_title = $preview->post_title;
 	$post->post_excerpt = $preview->post_excerpt;
+	
+	$post_preview_id = $preview->ID;
+	add_filter( 'get_post_metadata', '_get_preview_meta', 10, 4 );
 
 	return $post;
 }
 
+/**
+ * Private filter for getting metadata for the preview.
+ *
+ * @package WordPress
+ * @subpackage Post_Revisions
+ * @since 3.6.0
+ *
+ * @uses get_meta_data()
+ *
+ * @param unknown $value null
+ * @param int $object_id ID of the object metadata is for
+ * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for
+ * 		the specified object.
+ * @param bool $single Optional, default is false. If true, return only the first value of the
+ * 		specified meta_key. This parameter has no effect if meta_key is not specified.
+ *
+ * @return string|array Single metadata value, or array of values
+ */
+function _get_preview_meta( $value, $object_id, $meta_key, $single ) {
+	global $post_preview_id;
+
+	if ( !$meta_key )
+		return $value;
+
+	$versioned_meta = apply_filters( 'versioned_meta', $versioned_meta );
+	if ( ! in_array( $meta_key, $versioned_meta ) )
+		return $value;
+
+	$meta_cache = wp_cache_get( $post_preview_id, 'post_meta' );
+	if ( ! $meta_cache ) {
+		$meta_cache = update_meta_cache( 'post', array( $object_id ) );
+		$meta_cache = $meta_cache[$post_preview_id];
+	}
+	if ( isset( $meta_cache[ $meta_key ] ) )
+		return array_map( 'maybe_unserialize', $meta_cache[ $meta_key ] );
+
+	return $value;
+}
+
 function _wp_get_post_revision_version( $post ) {
 	if ( is_array( $post ) ) {
 		if ( ! isset( $post['post_name'] ) ) {
