The <iImmobileTurns>0</iImmobileTurns> tag in CIV4SpellINfos.xml doesn't make the spell immobilize anything; a non-0 value causes the spell to always miscast. This is why Entangle never works.
Allowing promotions to directly make a unit unable to move would be good too. I tried to make a certain very powerful new promotion have the side effect of making a unit immobile, and resorted to making it give -20 movement. I had forgotten hoe much the game hates having units with negative movement. (it works fine until you select them and try to see how far they could move. The courser changes to the normal moving unit one, but you cant select anything or get it to go back to normal. Everything freezes except for the moving mouse, and not even ctrl-alt-delete has anny effect. I had to restart the computer)
(I was trying to start implementing my unique forts idea. I couldn't get it to do exactly what I wanted, e.g., instead of making the each civ able to build diferent forts I could only replace the fort improvement one it was built in their territory (so their forts outside of their borders would be normal, and rival forts built inside would be their special version.)) The only way I knew to implement some of the special abilities (like Amurite forts increasing spell range/effectiveness and arcane unit xp gain, or sheaim forts making summons faster and causing twincasting) was through promotions. I could et the fort to grant he promotions to the appropriate units inside, but couldn't get them to go away once they left the fort. I tried to compromise by making a spell to give the promotion instead, but causing this spell to give the unit the promotion, which would also make the unit immobile. It would also allow another spell that would remove the promotion, which would be needed in order for the unit to leave the fort. This doesn't work well either.)