Well, off the top of my head it just looks like it undoes in too-large chunks. For example, I'd change something over on the top of a file, then scroll down to about midway and change a single character there. Undoing would take that single character and half or more of the earlier block up top.
Perhaps flushing (is that the word?) an undo state when clicking or otherwise changing the caret position (not by changing the text!) would help? In the above scenario, the undo would then only hit the one character in the middle, and leave the block up top for the next hit of Ctrl-Z.
Of course, this is all blind cellphone-in-bed rambling.