OK... I am clearly an idiot... I finally tracked down my bug... and indeed it is MY bug :-(
Turns out a completely different part of our system was still using the old DOMSubTreeModified event, and indeed fiddling with the DOM when that event fired. This in turn meant that the mutation observer had to fire in the middle of mutations.
One more notch on the (by now long) list of why the old mutation events suck!
Removing that bit of offending code means the mutation records come through *correctly* and the subsequent summary objects are all good too.
I'll add some comments on the bug i raised to please feel free to delete that issue (and another issue i raised). I'd delete them myself, but I dont think i can (nor edit them?).
I think we still need the "previous old sibling" on deleted nodes though, but that's a separate topic.
My apologies for wasting space in all your inboxes with this thread :-S