It gets as far echoing:
SE⸮
I agree with others: it looks like you exceeded array bounds and stepped on the RAM being printed. The two good characters you can see are safely written into the UART and eventually arrive at the PC. They would not be affected by RAM writes.
I would add to the other suggestions that you call Serial.flush() after each debug print section. This will wait for the debug prints to finish before the sketch continues:
breadcrumbs[iBCIndex][0] = iCurMenu; //Add the current menu to the breadcrumb array...
breadcrumbs[iBCIndex][1] = iCurOption; //...and the option selected
iBCIndex++; //Increment the breadcrumb array index
Serial.print("SELECT:");
Serial.flush();
for(int i=0;i<iBCIndex;i++) {
Serial.print(breadcrumbs[i][0]);
Serial.flush();
Serial.print(",");
Serial.print(breadcrumbs[i][1]);
Serial.flush();
Serial.print(":");
strcpy_P(cLCDBuffer, (char*)pgm_read_word(&options[breadcrumbs[i][0]] [breadcrumbs[i][1]] [0]));
Serial.print(cLCDBuffer);
Serial.flush();
}
You should add Serial.print + flush to display array indices before you access the arrays.