Hitachi HD44780 LCD works exactly 50% of the time
It looks like you're resetting your microcontroller, but the display is not resetting (when you press the button the display does not turn off/reset). Note that without a reset, you are starting in 4-bit mode, to send 8-bit commands you need to switch back to that mode.

In this case, the first thing your init should to is reset the display to a known state. Alternatively, you can just wire the display to reset with the same signal as the microcontroller reset.

For proper initialization look at the datasheet. Notice the initialization diagram in the datasheet starts with "Power On". You're not starting there, you're skipping the first couple steps. According to the datasheet, 


  If the power supply conditions for correctly operating the internal
  reset circuit are not met, initialization by instructions becomes
  necessary.


This is the 4-bit initialization by instruction diagram.