The TouchInputModule executes OnEnter by calling the HandlePointerExitAndEnter function, which calls OnEnter for newEnterTarget and all its ancestor nodes, and add all gameobject that have executed OnEnter to the hovered list.
However, when pointer release it executes OnExit on pointerEnter gameobject only.
I think the correct approach is invoke HandlePointerExitAndEnter(pointerEvent, null) when pointer release. Is this a bug or an expectation?