Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 17742)
+++ wp-includes/post.php	(working copy)
@@ -2605,16 +2605,24 @@
 
 	$post = get_post($post_ID);
 
-	if ( !empty($page_template) && 'page' == $data['post_type'] ) {
+	if ( ! empty( $page_template ) && in_array( $data['post_type'], array( 'page', 'revision' ) ) ) {
 		$post->page_template = $page_template;
 		$page_templates = get_page_templates();
-		if ( 'default' != $page_template && !in_array($page_template, $page_templates) ) {
+		if ( 'default' != $page_template && ! in_array( $page_template, $page_templates ) ) {
 			if ( $wp_error )
-				return new WP_Error('invalid_page_template', __('The page template is invalid.'));
+				return new WP_Error( 'invalid_page_template', __( 'The page template is invalid.' ) );
 			else
 				return 0;
 		}
-		update_post_meta($post_ID, '_wp_page_template',  $page_template);
+		if ( 'page' == $data['post_type'] ) {
+			update_post_meta( $post_ID, '_wp_page_template',  $page_template );
+		} elseif ( 'revision' == $data['post_type'] ) {
+			// update the meta for autosave, page preview
+			// sanity check, only allow this for pages
+			$revision_parent = get_post( $post->post_parent );
+			if ( 'page' == $revision_parent->post_type )
+				update_metadata( 'post', $post_ID, '_wp_page_template',  $page_template );
+		}
 	}
 
 	wp_transition_post_status($data['post_status'], $previous_status, $post);
@@ -4631,6 +4639,9 @@
 	$return['post_date']     = isset($post['post_modified']) ? $post['post_modified'] : '';
 	$return['post_date_gmt'] = isset($post['post_modified_gmt']) ? $post['post_modified_gmt'] : '';
 
+	if ( $autosave && 'page' == $post['post_type'] )
+		$return['page_template'] = isset( $post['page_template'] ) ? $post['page_template'] : 'default';
+
 	return $return;
 }
 
@@ -4946,6 +4957,9 @@
 	return $revisions;
 }
 
+/**
+ * @access private
+ */
 function _set_preview($post) {
 
 	if ( ! is_object($post) )
@@ -4965,6 +4979,9 @@
 	return $post;
 }
 
+/**
+ * @access private
+ */
 function _show_post_preview() {
 
 	if ( isset($_GET['preview_id']) && isset($_GET['preview_nonce']) ) {
@@ -4973,11 +4990,23 @@
 		if ( false == wp_verify_nonce( $_GET['preview_nonce'], 'post_preview_' . $id ) )
 			wp_die( __('You do not have permission to preview drafts.') );
 
-		add_filter('the_preview', '_set_preview');
+		add_filter( 'the_preview', '_set_preview' );
+		add_filter( 'get_post_metadata', '_show_page_template_preview', 10, 4 );
 	}
 }
 
 /**
+ * @access private
+ */
+function _show_page_template_preview( $null, $post_id, $meta_key, $single ) {
+	if ( $meta_key != '_wp_page_template' || ! is_preview() || get_the_ID() != $post_id )
+		return $null;
+
+	$preview = wp_get_post_autosave( $post_id );
+	return get_post_meta( $preview->ID, '_wp_page_template', $single );
+}
+
+/**
  * Returns the post's parent's post_ID
  *
  * @since 3.1.0
