ISR routine is not properly running

One of the issues to consider is that when the task reads fom the queue, the critical section is claimed implicitly to ensure queue coherence. It may be the case that this critical section ownership may interfere with the next character. I would also vote for not storing/reading the characters one byte at a time, at least not on the OS level.