After recovery check if the text changed.  If it did mark the buffer as
modified.
diff --git a/src/misc1.c b/src/misc1.c
index ffd0b83..d476f31 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -2514,19 +2514,28 @@
 		msg_scroll = save_msg_scroll;
 	    }
 	}
-	curbuf->b_changed = TRUE;
-	ml_setflags(curbuf);
-#ifdef FEAT_WINDOWS
-	check_status(curbuf);
-	redraw_tabline = TRUE;
-#endif
-#ifdef FEAT_TITLE
-	need_maketitle = TRUE;	    /* set window title later */
-#endif
+	changed_int();
     }
     ++curbuf->b_changedtick;
 }
 
+/*
+ * Internal part of changed(), no user interaction.
+ */
+    void
+changed_int()
+{
+    curbuf->b_changed = TRUE;
+    ml_setflags(curbuf);
+#ifdef FEAT_WINDOWS
+    check_status(curbuf);
+    redraw_tabline = TRUE;
+#endif
+#ifdef FEAT_TITLE
+    need_maketitle = TRUE;	    /* set window title later */
+#endif
+}
+
 static void changedOneline __ARGS((buf_T *buf, linenr_T lnum));
 static void changed_lines_buf __ARGS((buf_T *buf, linenr_T lnum, linenr_T lnume, long xtra));
 static void changed_common __ARGS((linenr_T lnum, colnr_T col, linenr_T lnume, long xtra));