I'm still unable to replicate this, BUT.. if you're looking for a solution you could add something inside the npc::process tic_timer.check().
Code:
if(!IsCorpse() && GetPetType() != petCharmed)
{
if(!GetOwner())
Depop();
}
I'm not sure if it would work but it's worth a shot?
If we can figure out what causes this it'd be nice too.