This is what I have learned. I will share in case others run into the same problem.
The Altera reference design can use either MSI interrupts or "Legacy Mode" interrupts on the PCIe bus. In Legacy Mode, physical interrupt lines are emulated throught PCIe messages (Assert INTA, Deassert INTA). The way the reference design works is that in Legacy Mode (when MSI is not enabled), the Assert INTA message is sent by the core instead of an MSI, and then the Deassert INTA message is sent immediately after. This is not the way Legacy Mode interrupts are supposed to work. The FPGA should HOLD INTA (not send the Deassert INTA message) until after the interrupt service routine has verified that the Arria is the source of the interrupt and has acknowledged the interrupt to the Arria through some memory transaction (on the same traffic class as the DMA). In order to properly use Legacy Mode interrupts, this interaction has to be added to the reference design and to the Linux driver (interrupt service routine).
If the design is used "as is", it is possible that the interrupt service routine will never be dispatched as the deassertion of the interrupt can happen before the kernel ever has a chance to call the registered ISR.
The design is easily modified to add the required handshaking from ISR to FPGA by adding a register to BAR2 (I'm using the upper 16 bits of the Error Status Register). The ISR then needs to read/write this register to acknowledge the interrupt.