InvalidateStaticOverlay() should be called every time PositionChanged messages are sent, whether m_AlwaysVisible is true or not (instead of just breaking immediately if m_AlwaysVisible is false).
While at it, flip the selection statements so that there is only one check for msgData.inWorld.