I had a look at the code. I'm thinking this isn't going to work for things you get from the engine that you aren't supposed to drop (despite the fact that they inherit IReferenceCounted) - For example, images and things loaded from file - unless the first pointer used to store them is not of this pointer type.
Otherwise nice work.
EDIT: It'd be nice if there was a "quiet drop" - some way of setting the pointer to null without deleting the data.
It's amazing how, once you get used to code, you start to prefer it over the WYSIWYG programs. Feel that power run through your fingers!