The relevant part of the source that stops EVENT_SAY working for engaged mobs seems to be:
zone/client.cpp around line 720:
Code:
if (target != 0 && target->IsNPC() && !target->CastToNPC()->IsEngaged()) {
#ifdef EMBPERL
if(((PerlembParser *)parse)->HasQuestSub(target->GetNPCTypeID(),"EVENT_SAY")){
#endif
If you have the ability to edit/compile the source, you could remove the part I have highlighted in red, or a Rule could be added so that you can control whether EVENT_SAY is called for engaged mobs.