Anyone more adept at troubleshooting than I am will have seen this coming...
This issue does not match my debugging path.
The
bot pet hate issue is actually a
bot hate issue caused by certain types of spells. (You pegged that one D!)
In the case of 'lifetap-esque' spells, Bot:

amage is passed the caster as 'from.'
Where (this == from), there's nothing to avoid wiping the hatelist from 'this' and adding of its group members to the list.
Code:
zone/bot.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/zone/bot.cpp b/zone/bot.cpp
index 51b649b..2013ad4 100644
--- a/zone/bot.cpp
+++ b/zone/bot.cpp
@@ -6364,6 +6364,8 @@ void Bot::Damage(Mob *from, int32 damage, uint16 spell_id, SkillType attack_skil
SendHPUpdate();
+ if(this == from) { return; }
+
// Aggro the bot's group members
if(IsGrouped())
{
The double-processing of bot pets issue is still relevant, but not to bot hate..from what I can tell.