I think that we should either tweak the grab machinery in case of pointer warping (your original fix proposal), or make each platform generate the required events that will let that machinery work unchanged.

It seems the latter was done on macOS. Indeed, things work on macOS because specific event is being send] on this platform by TkpWarpPointer(), which Windows does not generate. Removing this event from TkpWarpPointer() in tkMaxOSXMouseEvent.c makes the newly added test bind-35.1 fail on the mac.