Beh la prima domanda che mi viene in mente è: sicuro che il tempo che intercorre tra gli impulsi sia realmente sempre minore di 250ms, e che 250ms sia realmente l'intervallo di fine lettura? Hai provato a usare un oscilloscopio o almeno a fare uno sketch di test dei tempi tra impulsi?
PS Anche se non dovrebbe dare problemi, lo "switch(newCoinInserted)" lo metterei comunque dentro l'if() per sicurezza, tanto fino a che non entra nell'if() non può mai partire.