Das ist unter anderem der Sinn der Abfrage von anchorNode und focusNode: Wenn die Markierung ganz oder teilweise außerhalb von "Blatt" liegt, soll die Funktion nicht ausgeführt werden.
Vielleicht hilft dir dann dieses einfache Beispiel weiter.
http://molily.de/temp/execcommand.html
Wenn man mit execCommand arbeitet, dann ändert sich die Knotenstruktur, weil Elemente eingefügt und die Textknoten aufgesplittet werden. D.h. man muss generischer prüfen, ob die ausgewählten Knoten im RTE-Bereich liegen. Das geht gut mit compareDocumentPosition bzw. contains, siehe Quellcode.
Das Beispiel funktioniert in Firefox 3.6, Safari 5.0.4, Chrome 10 sowie IE 8 & 9.
Ich hab's vermutlich schon verlinkt, hier zwei Beispielscripte, die allgemein die Arbeit mit window.getSelection() und W3C DOM Ranges bzw. document.selection und Microsoft TextRanges illustrieren:
http://molily.de/weblog/selectionmenu-copylink
https://github.com/molily/selectionmenu
Mathias