投げっぱなしもなんなので書いてみた。

uint32 ModuleProxy::Release(IModule *po) {
ModuleProxy* pMe = (ModuleProxy*)po;

if(pMe->_pIModule) {
uint32 nRef;
if( (nRef = pMe->_pIModule->pvt->Release( pMe->_pIModule )) == 0 ) {
pMe->_pIModule = NULL;
return Release(po);
}
return nRef + pMe->m_nRefs - 1;
} else {
(以下変更なしにつき省略)

ちょっと試した限りでは問題なさげ。