Throughout the function we use data members instead of accessors. Is one preferrable to the other?
I don't think there is a difference.
Why lambda and not:
Node *&Begin = BeforeBegin ? BeforeBegin->NextSibling : FirstChild;
Answer to comments
Could you move this definition up so that it can be used in the last assert above?
Done in a separate commit: 6fbad9bf304c05d37454420f7d5a1c2ab3adab20