La causa más común son los datos que cambian entre un dibujado y otro. Una fecha, una hora, un número aleatorio: el servidor pone un valor y milisegundos después el navegador calcula otro distinto. También pasa con cualquier cosa que dependa de la zona horaria del visitante, porque el servidor no la conoce.
La segunda es leer cosas que solo existen en el navegador. Si tu código consulta el ancho de la ventana o algo guardado en el navegador durante el primer dibujado, en el servidor eso no existe y el resultado es distinto por definición.
La tercera es HTML mal anidado, y es la que más despista porque el mensaje no lo dice claro. Poner un bloque dentro de un párrafo, por ejemplo, hace que el navegador reorganice la estructura por su cuenta al leerla. Entonces lo que hay en pantalla ya no es lo que el servidor mandó, y la comprobación falla.
Y un caso frecuente que no es culpa tuya: alguna extensión del navegador del visitante que modifica la página antes de que termine de cargar. Si el error solo te sale a ti y no en incógnito, es eso.