First I would recommend doing a major code cleanup. You have a tangle of wires going in every direction and laying under objects. It is impossible to tell what goes where. You have stubs of code that go nowhere. I know you admit it's messy, but doing the cleanup first before posting might help you solve the problem, or at least make it easier for others to follow your code. Your upper right case structure has nearly indentical code, the only difference is which string indicator the results get written to. Move all of the common stuff outside of the cases. Likewise with the upper left case structure where the only difference is which String Control you are reading.
One problem I see is the millisecond wait timer in that upper right case structure. Are you using that to provide a delay between the Serial Write and Serial Read? That wait will occur concurrently with the Serial Read, thus you don't have any true delay between the Serial Write and the Serial Read. This is probably the cause of why you lose synchronization between the two data streams. You need to use a flat sequence structure with the wait timer in the middle so that the Serial Read can't occur until after the time has elapsed.