When a shader gets a _bmap variable, its texture is updated once per frame from the bitmap. This is not a bug, but just the purpose of the _bmap variable. Just as _var or _flt variables that are also updated once per frame.

Code:
if(once_per_frame) {
            if (paramDesc.Type == D3DXPT_TEXTURE) {
                char* found = MAT_FindParam(paramDesc,PID_BMAP);
                if (found) {
                    BMAP_T* bmap = (BMAP_T*)CS->GetObject(found,BMAP_IDX);
                    if (bmap)
                        m->d3deffect->SetTexture(hParam,D3D_Tex(bmap));
                    else
                        m->d3deffect->SetTexture(hParam,NULL);
                }
            }
}