Ross,

The IOC interrupts work differently than the RBC interrupts on the 628A.

To fully understand them, you'll need to read section 13.0 INTERRUPT-ON-CHANGE in the datasheet.
But essentially each IOC pin operates independantly, with individual selection of rising/falling edges, and individual interrupt flags.
Each pin must be enabled with edge selects, and the flags must be cleared on each interrupt.

The registers you need to look at are ...

IOCAP: INTERRUPT-ON-CHANGE PORTA POSITIVE EDGE REGISTERI
IOCAN: INTERRUPT-ON-CHANGE PORTA NEGATIVE EDGE REGISTER
IOCAF: INTERRUPT-ON-CHANGE PORTA FLAG REGISTER

After being setup properly, you can use the interrupt flags to tell what pins changed, instead of reading the port and doing the newbits-oldbits stuff.

If you don't clear the flags, you end up in a continuous interrupt loop and none of the rest of your program will execute.