Why are delay slots problematic in implementing interrupts in a pipelined processor?
The interrupt hits after the branch (i.e. with the Instruction Pointer at the new location) but before the delay slot instruction has executed. 

How do you know where you branched from?

That's where you need to re-fetch the delay slot instruction from.

See : COMEFROM instruction.