perhaps the first Imp check is to stop Vanish status from guaranteeing a hit for magical attacks and skipping over the second check?
Astute; the target having Vanish status is a requirement to get to that point in the code. In fact, now that I think about it, Master ZED's Bug FAQ mentioned that if Imp was cast on a Vanished enemy, that enemy's graphic would change to Imp even if the enemy is immune to Imp status. Maybe that has something to do with it?

After further testing, I can confirm this to be true.
any way you could post pseudocode of the relevant block(s)? i sadly don't speak GBAese, let alone the ported game dialect of it, where 70% of instructions are nonsensical misdirects. it'd make my head explode.
The whole structure of the port is to give it a SNES-like function as well as look. So, for instance, there are special addresses in RAM that the GBA uses for the "accumulator" and "X/Y registers". It also handles SNES processor flags manually instead of relying on its own processor flags which have largely the same purposes (e.g. Carry bit, Zero flag).
Since it's written that way, I think it would be most suitable to write the SNES equivalent to what is in the code.
LDA $B3
BPL no_vanish
LDA $3EE4,Y
BIT #$10
BEQ no_vanish
LDA $11A4
ASL A
BMI force_clear_vanish
LDA $11A2
BIT #$02
BEQ no_idp
LDA $3AA1,Y
BIT #$04
BNE force_clear_vanish
no_idp:
LDA $11AA
BIT #$20
BEQ check_physical
LDA $11A4
BIT #$04
BNE check_physical
LDA $331C,Y
BIT #$20
BEQ force_clear_vanish
check_physical:
LDA $11A2
LSR A
JMP miss_if_carry_set
force_clear_vanish:
LDA $3DFC,Y
ORA #$10
STA $3DFC,Y
no_vanish:
LDA $11A3
BIT #$02
BNE no_reflect
LDA $3EF8,Y
BPL no_reflect
REP #$20
LDA $3018,Y
TSB $A6
JMP miss_and_exit
no_reflect:
LDA $11A2
BIT #$02
BEQ no_idp2
LDA $3AA1,Y
BIT #$04
BNE force_miss
no_idp2:
LDA $11A2
BIT #$04
BNE no_dead_xor_undead
LDA $3EE4,Y
EOR $3C95,Y
BPL force_miss
no_dead_xor_undead
LDA $11AA
BIT #$20
BEQ no_imp
LDA $11A4
BIT #$04
BNE no_imp
LDA $331C,Y
BIT #$20
BEQ force_miss
no_imp:
LDA $B5
CMP #$00
That's as much as I'll include because the rest is detailed nicely in your bank C2 doc.