In one of the recent patches, it was changed that if Warlocks' pets run out of range, if a Warlock enters arena, or if a Warlock flies/hearths/is summoned somewhere, you will get the soulshard back.
Lets say you have Voidwalker out and want to change to Felguard. Both require a Soulshard to summon, but if you had tried to summon the Felguard while you had the Voidwalker out it would still require a soulstone.
Now heres the trick. Simply put the current pet you have out on "Stay". If you run away a few yards, the pet will go away and you will recieve a soulshard. Enjoy. (:
P.S. - Its snowing!