И вот где-то на этапе вычислений я либо не замечаю ошибки, либо не учитываю какую-то тонкость программирования МК.
А как ты можешь заметить ошибку, если не видишь значений?
Что конкретно у тебя насчитывает
таймер-1, что он вычисляет как значение для
таймера-2?
Заведи массив на все 48 строк, чтобы за время "рисования" запомнить все значения TCNT1 в момент INT0 и вычисленного kw_t2 для каждой строки.
И выведи эти значения по окончанию всего цикла рисования, хотя бы через UART на консоль.
Потребуется 48 * (2 + 1 ) = 144 байта памяти для массива.
поэтому переполнения Т1 быть не должно.
Не должно или их точно нет?
Прерывание по переполнению вижу - добавь туда какое-нить диагностическое мигание.
Переменные, которые используются/изменяются как в основном цикле, так и в прерывании объяви
volatible.