Elizabeth Figura (@zfigura) commented about dlls/wined3d/device.c:
if (reset_state) { TRACE("Resetting state.\n");
if (device->inScene)
wined3d_device_end_scene(device);
Unfortunately this won't be hit in the d3d9ex case, and a quick test shows that d3d9ex should end the scene here. So we probably do need to do wined3d_device_end_scene() from the client libraries after all :-/