Я нашел решение.
Длина была неправильной. В коде мы передаем длину строки перед подсчетом. Мы должны посчитать его после кодировки UTF:
writer.Write((byte)0); //First byte of payload length; (big-endian first byte)
enter code herebyte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload);
writer.Write((byte)b1.Length); //payload length (big-endian second byte)