Just out of curiosity have you tried using the hd44780_pinIO class in the hd44780 library and increased the instruction timing using setExecTimes()
Perhaps set them to something quite long just to see if it is timing issue.
i.e. add
lcd.setExectimes(9000, 8000); // 8ms for clear/home and 8ms for all others
Just before the lcd.begin()
From looking at an AdaFruit library that was for a Winstar OLED display they bumped the instruction significant during the initialization.
Over the years I have read others say that the instruction timing for some of the OLED displays is slower than the typical hd44780 display.
I would not recommend using the Adafruit library since that same library has MANY issues in it so I wouldn't use it.
The biggest issue is that they poll BUSY after initialization but they incorrectly poll the bus. They create a short on the data bus pins while they are polling and are needlessly bumping the E signal when polling for BUSY.
This could damage the LCD or the Arduino.
--- bill