End result: Fixed.

Without a mouse interface, Windows apparently does not treat cursor position the same way. In order to properly receive touch events, I had to watch for window message WM_POINTERUPDATE (decimal 581), and retrieve the correct position from the lParam value.