So I ended up solving the problem. After thoroughly reading the PIO core datasheet, I learned that I have to clear the interrupts after handling it, otherwise the system will keep interrupting.
As for the stalling issue, I had a buffer in the driver to buffer ~100 acquisitions (so user space programs had some time to react). And it seems that There wasn't enough heap space left on my DE2 sdram, after a few triggers it started eating into some vital kernel component and stalling the system.
On a related note. Does anyone know the best way to notify a userland program that an interrupt has occurred? I need to somehow send out my acquired data through either USB or ethernet, and I want to wake the sending process after an interrupt has occured and get it to read the buffer and send the data along to my computer for recording.