E' lo stesso sistema con cui abbiamo sviluppato il nostro impianto di domotica...e ci siamo già imbattuti su questo problema.
Il problema deriva dal fatto che nel metodo connect della classe EthernetClient c'è un loop di x secondi (mi pare 10) per tentare e ritentare la connessione. Finché il metodo connect non risponde e si ritorna al chiamante, gli altri "servizi" non possono elaborare e quindi non si possono campionare gli stati dei pulsanti ed eseguire le azioni ad esso collegate.
Non c'è soluzione a meno che non cambi il funzionamento della libreria EthernetClient.
Noi abbiamo risolto in altro modo: abbiamo reso la connessione passiva...cioè Arduino non si connette di sua sponte al server, ma lo fa quando il server stesso gli manda un comando per chiedergli di connettersi. Chiaramente questo comando viaggia in senso opposto: arduino fa da server e il server da client. Quando il server chiede ad Arduino di connettersi, esso esisterà di sicuro sulla rete. Quando sparisce dalla rete, la connessione cade e non viene automaticamente ripristinata dal nodo, lasciandolo libero di seguire gli altri servizi.