Hola.
El problema seguramente viene dado por la distribución de memoria del LCD. Hace mucho que no juego con rotaciones en LCDs de este tipo, pero acá vos estás rotando el contenido moviendo las coordenadas mediante lcd_gotoxy(,) y el display real tiene la memoria repartida de otra forma.En el datasheet del controlador del LCD podrás encontrar tal vez información de cómo está implementada la distribución de memoria de cada fila del LCD.
Para que te des una idea de lo que estoy diciendo, muchos LCDs de 16x2 implementan por ejemplo, 32 posiciones de memoria por fila. Las 16 visibles y 8 mas hacia la izquierda y 8 hacia la derecha. Eso te permite hacer o bien pequeñas rotaciones como haces vos, moviendo la posicion de memoria desde la cual escribir, o bien directamente rotaciones a la izq o der mediante comandos de rotacion de pantalla que el LCD seguramente soporta. El problema es que una vez terminada esa memoria(es decir, si rotás más allá de las 8 posiciones de offset hacia cada lado ofrecidas), los LCDs suelen tener zonas de memoria o bien no implementadas, implementadas pero no visibles o bien que pasan directamente a la fila siguiente.