It fires for the NPC that dies, not the NPC that does the killing, but it uses the killer NPC in the message.
By changing line 1761 of attack.cpp from 
	Code:
	parse->Event(EVENT_NPC_SLAY, this->GetNPCTypeID(), 0, oos->CastToNPC(), this);
 to ..
	Code:
	parse->Event(EVENT_NPC_SLAY, other->GetNPCTypeID(), 0, other->CastToNPC(), this);
 .. it will make the event happen on the slayer, not the slayee. I'm just not sure of what the original intent was, maybe I am misunderstanding it.