Also, my FreeRTOSConfig.h does not contain the handler mapping macros:
Is this assertion failing because my interrupt handlers are not correctly routed to the FreeRTOS port handlers, or is there another integration step that I have missed?
I have a CubeMX-generated FreeRTOS project that works. Can I use it as a reference when manually porting FreeRTOS, particularly for FreeRTOSConfig.h and the required initialization?
You should see what code in pvPortStartFirstTask is at 0x8008718 to see what is making the fault to understand what is the fault. You may need to look at the stack frame being loaded to start that first task.
After disabling (or changing) it, the FreeRTOS scheduler started correctly and my LED task began running.
Your suggestion to look at the SVC call and priority grouping pointed me in the right direction. Thanks again to everyone who helped troubleshoot this with me!