You can just use a regular box or polygon trigger. The DB_ExplorationZones logic will register the trigger for all players (that's what the first rule in the code you copied does).
In general, event triggers are only useful if you either need an event for every single character that ever enters it, or if you need an event thrown to behaviour script.
In other cases, it's usually better to use a box or polygon trigger and register it for the characters relevant to avoid having too many unnecessary events.

It is, none the less, odd that you're getting that XP multiple times.
Code
PROC
ProcAddXPToParty((CHARACTERGUID)_Player,(TRIGGERGUID)_Trigger)
AND
DB_ExplorationZones(_Trigger,_Act,_ActPart,_Gain)
AND
DB_IsPlayer(_OtherPlayer)
AND
NOT DB_ExplorationXPGiven(_OtherPlayer,_Trigger)
AND
CharacterIsInPartyWith(_OtherPlayer,_Player,1)
THEN
DB_ExplorationXPGiven(_OtherPlayer,_Trigger);
CharacterAddExplorationExperience(_OtherPlayer,_Act,_ActPart,_Gain);

should block that.

Is the character with which you're testing correctly added to DB_IsPlayer?