Faulty display behavior using a Atmega328 due to (wrong?) logic voltage level
This behavior is normal. The initialization sequence that you're sending doesn't clear the display; it just gets the display ready to display data. Since the display hasn't been cleared, it will display whatever random data happens to be in memory at startup.

To clear the display, set an address and start writing some data to it.