Maybe I should try to prolong the receiving routine artificially to take at least one additional character duration @115200Bd, after one char has been received.
That would be exactly the wrong way to do it. Your Arduino would spend all its time waiting for "one more" and never actually do anything else.
My comment about int8_t was just referring to the long comment in the code which explains why char is used in one of the buffers.
On the Uno and Nano then the discussion about USB packets doesn't apply. It doesn't matter if it has a 16U2 or a cheap anything on the front end. The chip which you are programming can't tell the difference.
The pattern of 2-6-6-LOTS is definitely weird. The lots of characters is a really long time in Arduino terms. If you have a delay(100) in there, then that would be understandable. I think it is something to do with your ring buffer algorithm using slow String operations. Convert it to strings and never move any data - use a pointer or index into the ring buffer or (better) change the algorithm so it doesn't have to store characters which were already examined and recognised/discarded.