When the remoting agent suffers a network timeout, it will retry the connection in the main loop in src/main/java/hudson/remoting/Engine.java. But if that reconnect also gets a timeout, it does System.exit instead of waiting 10s.
In the code src/main/java/hudson/remoting/Engine.java the method onConnectionRejected tells its listeners that the server rejected the connection and then waits 10s before retrying.
The problem is that both GuiEventListerner and CuiEventListener does a System.exit upon an error message.
Probably it should be a call to events.status instead of events.error...