Node::removedFrom is not called when a node is removed due to Document::removedLastRef. In that case, as an optimization, we just call the destructor (it is also rumored that this is the reason we do not issue onunload on frame destruction). We need a better name for removedFrom, or some other mechanism, to remind implementors that anything they do to clean up pointers etc must be done in both the destructor and removedFrom.
See http://trac.webkit.org/changeset/113852 as another example of a bug due to this behavior.
and https://bugs.webkit.org/show_bug.cgi?id=101505