Hi Jason Philippi,
Sorry for my later reply, it caused a lot of time to test your project.
Now, I found the root problem which caused your reset problem, it is the flash_task stack size is too small.
Please do the following modification:
1. flash_callback definition changed to:
bool SIZE_OPTIMIZATION flash_callback(uint8_t currentSwapMode)
2. CALLBACK_SIZE changed to
#define LAUNCH_CMD_SIZE 0x80 //0x200
#define CALLBACK_SIZE 0x130 //0x200 //0x1a0
3. ProcessorExpert.ld file
HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x4000;
STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x2000;
4.FRTOS1_xTaskCreate stack size changed to 1000.
void flash_initTask()
{
//flash1_InitConfig0.CallBack = (PCALLBACK)RelocateFunction((uint32_t)ramForCallback , CALLBACK_SIZE , (uint32_t)flash_callback);
if(FRTOS1_xTaskCreate(
flash_task, /* pointer to the task */
"flash_task", /* task name for kernal awareness debugging */
1000, /* task stack size */ //configMINIMAL_STACK_SIZE
(void*)NULL, /* optional task startup argument */
tskIDLE_PRIORITY, /* initial priority */
&flash_taskHandle /* optional task handle to create */
) != pdPASS)
{
for(;;){} //Ran out of heap
}
else
{
}
}
After debug, you can find the code can run over PFlashSwapCtl function.

I also attached my modified project.
After you add it and build it, please modify ProcessorExpert.ld stack and heap size.