Раз никто не ответил, отвечу сам:
На самом деле, в си-подобных языках нет оператора for в чистом виде. Фактически for это цикл while, для которого указано условие продолжения (b<=255) и некторый оператор, изменяющий b (b++).
Причем условние продолжения цикла проверяется на каждой итерации.
Когда значение b достигает 255, цикл отрабатывает, и далее выполняется операция b++, результатом которой является снова 0! Далее проверяется условие b<=255 - оно очевидно выполняется, и цикл идет дальше, таким образом зацикливаясь в бесконечность.
Для си в принципе это поведение нормальное, однако для C# лично мне это кажется не очень логичным поведением. Логичнее было бы на 255++ генерировать исключение (что то типа OverflowException) - ведь фктически происходит переполение. Но нет, он тихо сбрасывается в ноль и идет себе дальше

Точно такая же ситуация возникает и для всех остальных целочисленных типов. Например цикл
for(int i=0;i<=int.MaxInt;i++) - тоже зацикливается.
Получается что стандартный код типа
for(int i=1;i<=arr.Count;i++)
является небезопасным, так как если arr.Count==int.MaxInt, то цикл будет бесконечным :[