Index: src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js
===================================================================
--- src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js	(revision 32807)
+++ src/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js	(working copy)
@@ -14,6 +14,7 @@
 	tinymce.PluginManager.add( 'wptextpattern', function( editor ) {
 		var $$ = editor.$,
 			patterns = [],
+			VK = tinymce.util.VK,
 			canUndo = false;
 
 		/**
@@ -52,7 +53,7 @@
 		} );
 
 		editor.on( 'keydown', function( event ) {
-			if ( canUndo && event.keyCode === tinymce.util.VK.BACKSPACE ) {
+			if ( canUndo && ( event.keyCode === VK.BACKSPACE || event.keyCode === 27 ) ) { // esc
 				editor.undoManager.undo();
 				event.preventDefault();
 			}
@@ -61,7 +62,7 @@
 		editor.on( 'keyup', function( event ) {
 			var rng, node, text, parent, child;
 
-			if ( event.keyCode !== tinymce.util.VK.SPACEBAR ) {
+			if ( event.keyCode !== VK.SPACEBAR ) {
 				return;
 			}
 
@@ -87,6 +88,10 @@
 				}
 			}
 
+			if ( ! child.nodeValue ) {
+				child = child.nextSibling;
+			}
+
 			if ( child !== node ) {
 				return;
 			}
@@ -109,10 +114,18 @@
 				editor.undoManager.add();
 
 				editor.undoManager.transact( function() {
+					var $$parent;
+
 					if ( replace ) {
 						$$( node ).replaceWith( document.createTextNode( replace ) );
 					} else  {
-						$$( node.parentNode ).empty().append( '<br>' );
+						$$parent = $$( node.parentNode );
+
+						$$( node ).remove();
+
+						if ( ! $$parent.html() ) {
+							$$parent.append( '<br>' );
+						}
 					}
 
 					editor.selection.setCursorLocation( parent );
Index: tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js
===================================================================
--- tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js	(revision 32807)
+++ tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js	(working copy)
@@ -77,7 +77,7 @@
 		}, assert.async() );
 	} );
 
-	QUnit.test( 'Ordered list with content.', function( assert ) {
+	QUnit.test( 'Ordered list with content. (1)', function( assert ) {
 		editor.setContent( '<p><strong>test</strong></p>' );
 		editor.selection.setCursorLocation();
 
@@ -86,6 +86,15 @@
 		}, assert.async() );
 	} );
 
+	QUnit.test( 'Ordered list with content. (2)', function( assert ) {
+		editor.setContent( '<p><strong>test</strong></p>' );
+		editor.selection.setCursorLocation( editor.$( 'p' )[0], 0 );
+
+		type( '* ', function() {
+			assert.equal( editor.getContent(), '<ul>\n<li><strong>test</strong></li>\n</ul>' );
+		}, assert.async() );
+	} );
+
 	QUnit.test( 'Only transform inside a P tag.', function( assert ) {
 		editor.setContent( '<h1>test</h1>' );
 		editor.selection.setCursorLocation();
