The closest thing I've been able to approximate what you're doing is using
devmanview /disable_enable to bounce my WinRM connection's NIC- it definitely hangs on the Receive in that case, as I expected. Regardless, it's a race, so without deferring the action on the Windows side, it's possible that the NIC could bounce even before you've gotten the response from the WinRM Command POST, much less the actual process results via the next WinRM Receive call.
Unless you want to start working with things at the winrm level (trust me, you probably don't), the trick is going to be deferring the device bounce until *after* the WinRM session has completed (where I was going with the sleep before the command in a separate process). This is further complicated by WinRM's aggressive nuking of child processes once the parent shell has exited, so it's also possible you're running into that (eg, WinRM call completes, while Powershell subprocess is still sleeping, WinRM helpfully nukes the process for you before/during the action you want).
You might also want to look into doing this in a scheduled job- that would at least let you escape the constraints of the WinRM environment, though it brings a whole host of other problems, too...
Or just wait for async in 2.2. :)