RESOLVIDO: Receber e tratar dados?

Bom acho que entendi o problema, falta você remover todos os caracteres que recebeu da serial no primeiro envio e quando há "fail".
Pois se no segundo if do seu código se der "fail" os caracteres recebidos restantes, ficaram no buffer, criando lixo para a próxima vez que ler o buffer.
Bom, não tenho o Arduino para testar aqui, mas acho q após o "fail" você faz:

   .
   .
   .
else {
       Serial.println("FAIL");
       while(serial.avalaible()>0)
              {
              serial.read(); // Tira todos os caracteres do buffer.
              }
       }

ou

   .
   .
   .
else {
       Serial.println("FAIL");
       Serial.flush();
       }

Eu acho que o flush(), não é a função certa, mas fica como referência, a primeira opção é a que eu confiaria mais.