I seem to have solved the problem. It seems like there was an incorrect condition in the interrupt handler that was aborting the DMA transfer at the wrong time, never letting the transfer even begin.
A serious "duh" moment, but it took serious struggle to find it.
As per the comments, sorry if I polluted SO with my desperation. Still learning how to be a good citizen.
Not sure if the code linked above will remain static as my project changes or whether that link will reflect the most current version. Basically just be careful not to abort your transfer at the wrong time.