Index: src/wp-admin/js/editor-expand.js
===================================================================
--- src/wp-admin/js/editor-expand.js	(revision 38281)
+++ src/wp-admin/js/editor-expand.js	(working copy)
@@ -16,6 +16,8 @@
 			$textTop = $( '#ed_toolbar' ),
 			$textEditor = $( '#content' ),
 			textEditor = $textEditor[0],
+			$textEditorClone = $textEditor.clone().attr({ id: 'content-clone', name: null }),
+			textEditorClone = $textEditorClone[0],
 			oldTextLength = 0,
 			$bottom = $( '#post-status-info' ),
 			$menuBar = $(),
@@ -76,7 +78,7 @@
 		}
 
 		function textEditorResize() {
-			if ( mceEditor && ! mceEditor.isHidden() ) {
+			if ( ( mceEditor && ! mceEditor.isHidden() ) || ! textEditorClone ) {
 				return;
 			}
 
@@ -89,13 +91,22 @@
 			var top = window.scrollTop;
 
 			if ( length < oldTextLength ) {
-				// textEditor.scrollHeight is not adjusted until the next line.
-				textEditor.style.height = 'auto';
+				if ( oldTextLength - length === 1 ) {
+					textEditor.style.height = ( height - 19 ) + 'px';
 
-				if ( textEditor.scrollHeight > autoresizeMinHeight ) {
-					textEditor.style.height = textEditor.scrollHeight + 'px';
+					if ( textEditor.scrollHeight > autoresizeMinHeight ) {
+						textEditor.style.height = textEditor.scrollHeight + 'px';
+					} else {
+						textEditor.style.height = autoresizeMinHeight + 'px';
+					}
 				} else {
-					textEditor.style.height = autoresizeMinHeight + 'px';
+					textEditorClone.value = textEditor.value;
+
+					if ( textEditorClone.scrollHeight > autoresizeMinHeight ) {
+						textEditor.style.height = textEditorClone.scrollHeight + 'px';
+					} else if ( textEditorClone.scrollHeight < height ) {
+						textEditor.style.height = autoresizeMinHeight + 'px';
+					}
 				}
 
 				// Prevent scroll-jumping in Firefox and IE.
@@ -112,6 +123,9 @@
 			oldTextLength = length;
 		}
 
+		// Append the cloned textarea after the "real" one and move it off screen.
+		$textEditor.after( $textEditorClone.css({ position: 'absolute', left: '-10000em' }) );
+
 		// We need to wait for TinyMCE to initialize.
 		$document.on( 'tinymce-editor-init.editor-expand', function( event, editor ) {
 			var VK = window.tinymce.util.VK,
