Dopiero teraz to zauważyłem

Problemem może być to że cały czas odświeżasz wyświetlacz w pętli while i dodatkowo go czyścisz w przerwaniu.
Pamiętaj że w momencie wywołania przewania pętla główna jest wstrzymywana na rzecz przerwania w twoim przypadku od timera , więc może się zdarzyć sytuacja że w trakcie zmiany informacji wyświetlanych na LCD wpada sobie ISR (TIMER2_COMP_vect) (które wstrzymuje wykonywanie głownego programu) ze swoim LCD_CLS() i cały misterny plan idzie w .......

Wywal czyszczenie lcd_cls z przerwania przenieś je do pętli while, dodatkowo w przerwaniu wykozystaj flagę do do odświeżania wyświetlacza w pętli głównej.
Nie wiem czy to w miere jasno napisałem .... ale mam nadzieję że załapiesz.
------------------------ [ Dodano po: 6 minutach ]Dodatkowo przyglądając temu przerwaniu ja osobiście wywalił bym cały warunek if do petli głównej ....