La mejor respueta que encontré para tu problema es esta. enlace
You might be encountering a glitch in the way Arduino uses avrdude. Avrdude assumes that memory has been cleared to 0xFF before uploading. If it finds a 'page' (512 bytes?) of 0xFF in your code it won't bother sending it because it assumes the memory is already set that way. If the memory ISN'T set that way (from a previous upload) your code won't verify.
Do you have a big chunk of your data full of 0xFF (-1) bytes?
Dice que AVerdude asume que la memoria este limpia a 0xFF antes de la subida. Si encuentra una página (512 bytes) no hace el upload porque asume que la memoria ya esta seteada de ese modo. Si la memoria no esta seteada de ese modo (de una subida previa) tu código no será verificado.
Luego le pregunta si tiene una gran cantidad de datos fijados en 0xFF
Y la otra persona le dice que tiene dos grandes bitmaps cargados en la flash.
¿ Pero eso es en la programacion de la EEPROm, o es de la FLASH ?
Porque me surge una duda si da error porque detecta que la memoria tiene datos nunca podriamos reprogramar el Arduino y sin embargo lo hacemos continuamente.
Repasando la configuracion del avrdude he visto que efectivamente necesita borrar previamente la memoria que queremos programar (FLASH, EEPROM) y para ello hay que habilitar un flag <-U> en la linea del comando.
Si este flag no existe, o ponemos en su lugar el <-D>, el programa grabara sin hacer borrado previo y, claro, al verificar dará error.
Aqui os muestro una linea de comando por defecto (la que yo uso):
donde lo unico realmente importante (para esta aclaracion) es que exista el flag < -U > con la memoria que vamos a grabar (flash en el ejemplo).
No se me ocurre que otra cosa te puede dar ese error.
Modifica la linea de comando del avrdude (si procede) de acuerdo con lo comentado, prueba y nos cuentas.