Are you certain of the part number for the device you are working with? I don't know that version -
However, for MC9S08AC60 (what I am using at the moment) when keyboard interrupt is generated, in my interrupt service routine I do:
KBISC = KBISC_KBACK; // 0x04 Acknowledge kb interrupt, clear KBIMOD so it is edge only, clear KBIE so no new interrupt is generated for now
.... do other things..
KBISC = KBISC_KBIE | KBISC_KBIMOD; // RE enable interrupt generation for active low and falling edge
What is important to note, if you are using falling edge AND low levels to trigger interrupt like I am doing, is that the KBF flag will continuously be asserted if the input pin is still remaining in the low level after the falling edge occurs. So, when I write with the KBISC_KBACK = 1, I make KBIMOD = 0 so that the KBF bit should clear (or at least another interrupt will not be generated because the KB Controller will be in edge only, not edge and level move).
When I am ready to leave the interupt routine I write the KBISC_KBIE | KBISC_KBIMOD bits = 1 to restore keyboard interupts to edge and level function.
So, depending on KBEDG(bits 7- 4) bits and KBIMOD (bit 0) if any of the enabled inputs in KBIPE register are remaining in the activated level/state, the KBIF flag will continuously be set=1.