LCD display 16x2 showing gibberish - how to reset? [SOLVED]

In 4 bit mode, the host and the LCD must remain in nibble sync. If they lose nibble sync with each other, it will never recover so the LCD will start to see garbage commands.
The only way to recover is to re-initalize the LCD using a special 3 command sequence to get back into sync.
This is done in the code in begin()

If you power cycle the LCD but not the Arduino that won't help since the default power up mode for the LCD is 8 bit mode.
So if the library is in 4 bit mode and you power cycle only the LCD, the host (arduino) and the LCD will not be in the same mode (LCD in 8 bit mode, host in 4 bit mode) and the LCD will see garbage commands.

Nibble sync is lost if there is ever a glitch on the E signal.
You can help reduce this from happening by keeping the wires as short as possible, ensure all grounds and power signals have good connections.
Sometimes adding a .1uf cap directly to the LCD power and ground connections on the LCD module can help.

You could also try running the LCD in 8 bit mode which uses more pins but is supported by the LiquidCrystal library.
In 8 bit mode, it is still possible to get glitches on the display, but since things are done byte at a time there is no nibble synchronization issue so any effects of noise should be short lived and future commands to the LCD should continue to work.

--- bill