One thing about intrusive lists, you have to know and specify every list the item may be on. Maybe you like that, maybe you don't.
Also, it doesn't appear the provided code gracefully handles removing an item from a list twice.
Also, it doesn't appear the provided code gracefully handles removing an item from a list twice.
I feel like this kind of problem is actually a specific instance of a much larger problem - that being explicit about these things leads to more maintainable code, at the expense of some 'leet things' that can cause troubles if not implemented perfectly.
m_prevLink->m_nextNode = m_nextNode;
I don't see where m_prevLink is changed. If the previous link has gone away, and you call RemoveFromList on this node a second time, it's going to chase that pointer.