Это очень давняя ошибка в Chrome: https://crbug.com/2902: (
Вы можете обойти эту проблему, если найдете способ использовать только colspan == 1.
Обратите внимание, что FWIW, добавляя display: block к td.red
, помещает рамку вокруг рамки, которая находится внутри неявно добавленной ячейки. Вы можете видеть, что красная граница не покрывает серую рамку, а вместо этого находится внутри нее.