Nunca usei serialEvent(), me parece uma solução bastante interessante.
Mas não entendo como ela pode funcionar junto com o readuntil.
A questão é que se chega 1 byte o processamento vai parar no SerialEvent() aih dentro do serial event vc fica travado esperando outro byte chegar... Acho que o problema está aih.
Minha sugestão seria criar uma variavel global para receber a string, Sempre que houver uma recepção verificar se for /n ou não . Se for vc processa a string, se não for vc acumula.
A rotina que espera o /n deve estar saindo por timeout, por isso a demora.