Я знаю про нулевой адрес и BOD. Почти всегда использовал встроенные
в компилятор функции работы с EEPROM и с обычными AVR они не
подводили (кроме как в бета-версии среды разработки). Какие-то меры
там уже приняты, подозреваю, что неиспользуемый нулевой адрес и
парковка. У Хмег случались повреждения данных. Достаточно редко чтобы как-то попытаться это исследовать, но достаточно часто чтобы потребовались меры.
С поддержкой AVR-D в IAR сейчас столько проблем, что до вопроса надежности EEPROM можно элементарно не дойти. Компилятор при попытке получения указателя на элемент лежащей в EEPROM структуры может подсунуть не тот адрес. Находящийся в регистрах адрес, относительно которого компилятор обращается к переменным, в нужный момент может оказаться затерт (а data-брекпойнтов нет, чтобы выяснить кто-же это сделал). switch-caseы и ifы, волшебным образом влетающие не в ту ветку. Плюс все это проявляется по разному при разных уровнях оптимизации. Плюс сходящий с ума линкер. Просто замечательно, что все это происходит в небольшом чисто пробном проекте.