Ham_RemovePlayerItem is called on "player" entities when a client sends "drop" or when the game (in many different cases it looks like) forces a player to drop an item, like when a player dies.
Ham_Item_Drop is called only in a few cases it looks like and it actually destroys the weapon entity. There is CBasePlayerItem:Kill which does the same. I don't really get the logic behind this function, but it shouldn't be used to hook when a weapon is dropped.
Ham_Weapon_RetireWeapon is called when a weapon should be holstered and the next best weapon should be deployed. That happens for example when you throw a flashbang or run out of ammo.