Yes, I agree. I intended to add that, but haven't gotten to it.
The updated thread-wait does support this with an extra fail-thunk argument:
> (list (thread-wait (thread #:keep 'results (lambda () (+ "oops")))
(lambda () 'failed)))
+: contract violation
expected: number?
given: "oops"
[,bt for context]
'(failed)
The intent is definitely that (system-idle-evt) waits until no parallel thread can make progress, the same a coroutine threads. That's important for the only use that I know for system-idle-evt, which is testing.