Maybe there is a bug in bindings, or in bindings+NSDocument, because it was during triggering of the text view's binding that it jumped to the top. The fix was to remove the binding. Instead, achieve syncing between the markdownSource ivar and the text view by changing the ivar to an NSTextStorage and using it as the textStorage of the text view.
When you set an NSTextView's font in IB, it doesn't stick when you run the app. You get whatever the default font is. The previous workaround was to set a font attribute on the attributed string. This didn't handle the case when you open a new document and immediately paste something into it. Better workaround is to send setFont: just after the nib is loaded.
I also turned off "Rich Text" for the text view in IB.