Бьюсь об заклад, ваш поток содержит некоторые символы, которые требуют более одного байта.UTF8 использует один байт, когда это возможно, но использует больше байтов, когда символ находится вне диапазона ASCII.
Это объясняет, почему ваш буфер длиннее строки (300 против 285).
Пример :
string: "t e s t ä " (length = 5 -last char takes 2 bytes)
bytes: 0x74 | 0x65 | 0x73 | 0x74 | 0xc3 0xa4 (length = 6)
Что касается того, почему это становится еще длиннее, когда вы конвертируете текст обратно в байты, я предпочитаю (также учитывая размер 521, который вы получаете), что вы используетеEncoding.Unicode вместо Encoding.UTF8 для выполнения преобразования.Unicode всегда использует два байта для каждого символа.
(кстати. Очевидно, это не имеет ничего общего с Silverlight. Вы, вероятно, тестируете код с двумя разными строками в Winforms против Silverlight. Не беспокойтесь, мы всесовершил глупые ошибки вроде этого :-))