After starring at this code for a while I finally got it: the code with the while loop is checking if the currentNode is actually in the subtree of a rejected node, which is deadzone for the iterator of course. 
What was I blind. Please, add a comment still in front of the while-loop so other's who hvae bought the same glasses like I did will have an easier time.

I see you changed to logic a little from the old code. Not sure the new code is really better, like the TODO also tells. Hm, would this perhaps do the task, which is check the complete chain of parent nodes to the root and set walker.currentNode behind the highest rejected node in the tree, if there is?
```
while (node && node !== root) {
    filterResult = nodeFilter(node);
    if (filterResult === FILTER_REJECT) {
        // Set currentPos to 1 to indicate iteration on the currentNode is complete.
        // This will cause the next call to self.nextPosition() to jump to the next
        // available sibling or parent
        currentPos = 1;
        walker.currentNode = node;
    }
    node = node.parentNode;
}
```