Рестарт бывает, когда в программе много глобальных и/или статических переменных. WDT успевает сработать пока они все нулями проинициализируются. Глушите WDT на время инициализации в функции low_level_init. Выбор же модели памяти указывает компилятору на необходимость использования расширенных команд. На оптимизацию он влияет слабо ИМХО.