Set BEGeyserPoint[BEIndex[2]] = (Position of BEGeyser[BEIndex[2]])
This leaks as it is run in a loop 10 times under BEIndex[2] being constant (not changing) and the asigned location is not removed until the end of the loop, resulting in 9 location leaks. Every handle you create must be destroyed if you no longer need it (or it no longer affects the game).
Why are you using static indicies so much (eg BEIndex[2]])... The whole point of arrays are to provide dynamic indicies so you defeat their purpose using static ones. Rather just use a normal variable in this situation as it is faster to reference (no offset finding required etc).
This system does not recycle indexes, it only just restricts their range to a seemingly random number.
Do you really run code every one second? What is the point of doing that if no spells are active, you tell me.
Obviously as it is GUI it leaks handle indicies and is not very efficent but you can not be blamed for that.