If I add the following to my `uv_run()`, it works as expected in all 3 cases with one `UV_RUN_ONCE`:

```
@@ -310,6 +310,12 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
       timeout = uv_backend_timeout(loop);
 
     uv__io_poll(loop, timeout);
+
+    if (mode & (UV_RUN_ONCE | UV_RUN_NOWAIT)) {
+      uv__update_time(loop);
+      uv__run_timers(loop);
+    }
+
     uv__run_check(loop);
     uv__run_closing_handles(loop);
     r = uv__loop_alive(loop);
```