Ну, это не самое лучшее использование циклов ЦП, удаление байтов из списка (байтов) является операцией O (n). Выполнение общего этапа обработки O (n ^ 2). Все еще довольно трудно оказывать какое-либо давление на процессор, поскольку последовательные порты работают медленно. Вы должны когда-либо изменять рабочий код только в том случае, если вы измерили, что это проблема с производительностью.
Если вы еще не там, подумайте о создании нового массива или списка из старого. Это O (n), дополнительная память не может повредить, учитывая медленную скорость передачи данных. Код тоже должен быть чище.
Что касается потоков, обязательно сделайте это в обработчике DataReceived. Это потокобезопасное и позволяет избежать чрезмерного давления на поток пользовательского интерфейса в случае, если вы вызываете.