Добрый день. Как оказалось проблема была не в mapSaveProject, а в функции LoadDirToMap.
Вот такой код работает:
char _dirFileName[MAX_PATH]{};
char _file_path [MAX_PATH]{};
strcpy (_dirFileName, dirFileName.toLocal8Bit().data());
strcpy (_file_path, file_path.toLocal8Bit().data());
bool res_load_sxf = LoadDirToMap(_dirFileName, _file_path, NULL);
А вот такой приводит к ошибке в момент уничтожения dirFileName, file_path (aka QString)
bool res_load_sxf = LoadDirToMap(dirFileName.toLocal8Bit().data(), file_path.toLocal8Bit().data(), NULL);
Возможно внутри LoadDirToMap что-то происходит со строками, что приводит к исключению во время вызова деструктора.