It turns out current semantics of NULL invalidated rect or region differs between Windows and Wine: on Wine it gets the current size based on window size while on Windows that means "full window" rectangle which changes with changing window position (including changed with SWP_NOREDRAW which doesn't invalidate enlarged window).
An alternative implementation would be to manage that in region.c, but after some consideration it seems to me that would be less straightforward because the rules when a rectangle continues to be full window or not are not mathematically straightforward: e. g., subtracting empty region with ValidateRect breaks region's fullscreen status while adding some region with additional InvalidateRect doesn't. While the operations in region.c seem to follow strict rules and are based on X consortium code. Besides, pulling the logic there would require relaying window sizes.