The only thing... It doesn't seem like NtYieldExecution after server call doesn't make much sense? If we waited noone can ever tell whether we yielded or not. There could be in theory some difference for zero timeout, but it is server request anyway, it yielded enough while waiting for server reply. So I suggest to just remove the new return value from server_wait() and only care for yield and its status in NtYieldExecution()'s own yield with zero timeout (and always return 'yielded' result on alertable / server path).
Then, the test looks actually inherently flaky, it is not given that it should ever yield in 50 attemps if the machine is not loaded, maybe worth not checking the conditions depending on that in 'if (0) and make a comment?