Sketch not working with Baudrate over 9600Baud

Hey,
I’m trying to send a Picture via the Serial to the Arduino and display it on a ST7920 128x64 LCD using the u8g2 library. Everythink works fine when using 9600 Baud but if I use over 9600 I get wrong pixels.
I send the picture using C#.

C# Image sender

SerialPort port = new SerialPort("COM3");
port.BaudRate = 9600;
port.Open();
byte[] buffer = new byte[1024];
for (int i = 0; i < 1024; i++)
{
    buffer[i] = 0x55;
}

Thread.Sleep(1000);

for (int i = 0; i < 1024; i++)
{
    port.Write(buffer, i, 1);
    Thread.Sleep(15); // Doesn't make any difference
}

//port.Write(buffer, 0, 1024); //Works with 9600 Baud but not with >9600 Baud

port.Close();

Arduino Image receiver

#include <U8g2lib.h>
#include <SPI.h>

U8G2_ST7920_128X64_F_HW_SPI lcd(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);

void setup()
{
  Serial.begin(4800);
  lcd.begin();

  while (Serial.available())
  {
    Serial.read();
  }
}

void loop()
{
  lcd.clearBuffer();
  uint8_t * buffer = lcd.getBufferPtr();

  int lenght = 8 * lcd.getBufferTileHeight() * lcd.getBufferTileWidth(); // 1024
  for (int i = 0; i < lenght; i++)
  {
    while (Serial.available() < 1)
    {
      delay(1);
    }

    buffer[i] = Serial.read();
  }
  lcd.sendBuffer();
}

Image with 9600Baud

Image with Baudrate > 9600 (115200)

The data is correctly send (captured USB using Wireshark with USBPCap)

Does anyone have a clue why this happens and how can i fix it?
I already tried to send the data all as one chunk (port.write(buffer, 0, 1024); without the for loop) which works perfectly fine with 9600Baud but has the same result with a higher baudrate like when sending the data byte by byte with lots of delay.

Program size: 7.280 bytes (used 23% of a 32.256 byte maximum) (1,75 secs)
Minimum Memory Usage: 1592 bytes (78% of a 2048 byte maximum)

As you can see i have a very high memory usage but this is with the buffer of the u8g2 library (i believe so…) so memory should not be a problem or am i wrong?

Thanks for your help

for (int i = 0; i < lenght; i++)
  {
    while (Serial.available() < 1)
    {
      delay(1);
    }

At 9600 bits per second, you get one character every 1.04 milliseconds.

Ponder a while.

If I remove the delay everything should work fine no matter if I send with 115200Baud or 9600Baud as long as I'm not sending the data faster than the Arduino processes it so the Serial buffer doesn't overflow...
But with sending one Byte at a time and then wait for 15ms it should work with 115200Baud and 9600Baud because the Arduino is fast enough to process the data without getting a overflow. But I still get those exact messed up pixels with a baudrate over 9600Baud....

Am i thinking in the wrong direction?!

But with sending one Byte at a time and then wait for 15ms it should work with 115200Baud

How many characters could you receive in 15ms, at 11520 characters per second?
How big is the receiver buffer?

Have a look at the examples in Serial Input Basics - simple reliable ways to receive data. It works fine for me at 500,000 baud.

...R