Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 16581)
+++ wp-includes/post.php	(working copy)
@@ -2592,7 +2592,7 @@
 
 	$post = get_post($post_ID);
 
-	if ( !empty($page_template) && 'page' == $data['post_type'] ) {
+	if ( !empty($page_template) && (('page' == $data['post_type']) || ('revision' == $data['post_type'])) ) {
 		$post->page_template = $page_template;
 		$page_templates = get_page_templates();
 		if ( 'default' != $page_template && !in_array($page_template, $page_templates) ) {
@@ -2601,7 +2601,12 @@
 			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
+			update_post_meta($post_ID, '_wp_preview_page_template',  $page_template);
+		}
 	}
 
 	wp_transition_post_status($data['post_status'], $previous_status, $post);
@@ -4629,6 +4634,10 @@
 	$return['post_name']     = $autosave ? "$post[ID]-autosave" : "$post[ID]-revision";
 	$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 ) {
+		$return['page_template'] = isset($post['page_template']) ? $post['page_template'] : 'default';
+	}
 
 	return $return;
 }
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 16581)
+++ wp-includes/theme.php	(working copy)
@@ -946,7 +946,11 @@
  */
 function get_page_template() {
 	$id = get_queried_object_id();
-	$template = get_post_meta($id, '_wp_page_template', true);
+	if ( is_preview() ) { //a page preview may have a different template than the published page
+		$template = get_post_meta($id, '_wp_preview_page_template', true);
+	} else {
+		$template = get_post_meta($id, '_wp_page_template', true);
+	}
 	$pagename = get_query_var('pagename');
 
 	if ( !$pagename && $id > 0 ) {
