I have discovered something.

If you change an entities skin, use ent_setskin(); instead of ent_morphskin();

With ent_morphskin, it uses a string to load the bitmap. With ent_setskin, it uses a previously declared BMAP* pointer.

The difference is that you can only use bmap_purge on BMAP* pointers, not on strings. This has been my experience anyway.

Currently, I was able to load several entities, purge their entities and bitmaps and load more, and the "d3d_texskins" number stays fixed, it no longer creeps up as I add more entities...

I am still seeing overall RAM usage creeping up though, but not nearly as much as before. I believe there are some objects/entities that I have not yet purged properly, so I need to keep looking through my code...

Anyway, I hope some of this provides the info you're looking for. Let me know if you find out any more about this.