То, что я считаю, происходит, когда вы удаляете многоразовую ячейку из очереди, вы делаете это не в определенном порядке. Как и в случае, когда вы прокручиваете медленно, ячейки становятся доступными по одной и снимаются с вас по очереди. При быстрой прокрутке порядок становится неопределенным, как и порядок, в котором они сняты. Я полагаю, что именно поэтому (по большей части) Apple разработала API UITableView для удаления из очереди по идентификатору, чтобы вы могли легко повторно использовать разные типы ячеек, например, с разными цветами. Поэтому я рекомендую изменить код, чтобы у каждого цвета ячейки был свой идентификатор. (Кроме того, если возможно, используйте выход, соединяющий этот источник данных табличного представления с ячейкой напрямую, или сохраните его в виде ивара после его загрузки один раз, а затем скопируйте, а не циклически перемещайтесь между объектами высокого уровня)