Looks like the display is quite slow and probably it does not get all signals before they are changed. See ui.cpp where you have this function:
void lcdWriteByte(uint8_t c, uint8_t rs) {
#if false && UI_DISPLAY_RW_PIN >= 0 // not really needed
SET_INPUT(UI_DISPLAY_D4_PIN);
SET_INPUT(UI_DISPLAY_D5_PIN);
SET_INPUT(UI_DISPLAY_D6_PIN);
SET_INPUT(UI_DISPLAY_D7_PIN);
WRITE(UI_DISPLAY_RW_PIN, HIGH);
WRITE(UI_DISPLAY_RS_PIN, LOW);
uint8_t busy;
do {
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH);
DELAY1MICROSECOND;
busy = READ(UI_DISPLAY_D7_PIN);
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
DELAY2MICROSECOND;
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH);
DELAY2MICROSECOND;
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
DELAY2MICROSECOND;
} while (busy);
SET_OUTPUT(UI_DISPLAY_D4_PIN);
SET_OUTPUT(UI_DISPLAY_D5_PIN);
SET_OUTPUT(UI_DISPLAY_D6_PIN);
SET_OUTPUT(UI_DISPLAY_D7_PIN);
WRITE(UI_DISPLAY_RW_PIN, LOW);
#endif
WRITE(UI_DISPLAY_RS_PIN, rs);
WRITE(UI_DISPLAY_D4_PIN, c & 0x10);
WRITE(UI_DISPLAY_D5_PIN, c & 0x20);
WRITE(UI_DISPLAY_D6_PIN, c & 0x40);
WRITE(UI_DISPLAY_D7_PIN, c & 0x80);
#if FEATURE_CONTROLLER == CONTROLLER_RADDS
HAL::delayMicroseconds(10);
#else
HAL::delayMicroseconds(2);
#endif
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH); // enable pulse must be >450ns
#if FEATURE_CONTROLLER == CONTROLLER_RADDS
HAL::delayMicroseconds(10);
#else
HAL::delayMicroseconds(2);
#endif
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
WRITE(UI_DISPLAY_D4_PIN, c & 0x01);
WRITE(UI_DISPLAY_D5_PIN, c & 0x02);
WRITE(UI_DISPLAY_D6_PIN, c & 0x04);
WRITE(UI_DISPLAY_D7_PIN, c & 0x08);
HAL::delayMicroseconds(2);
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH); // enable pulse must be >450ns
HAL::delayMicroseconds(2);
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
HAL::delayMicroseconds(100);
}
you see for radds display there are already some longer delays (10us instead of 2us). I think you need to increase this to make it stable. My guess is that 10us is still to slow for your board while it worked on mine. It could also be an other delay that is too fast but start with the 10us delay..