When a level is loaded, several loops are active, one is a loop over all shaders that are assigned to something. This loops checks all shader variables for possible updates. I do not know why a particular shader is faster or slower than another one - I guess that simply depends on the environnment.

The difference between 500 and 1000 fps is 1 millisecond. Can this millisecond can be "fixed", maybe reduced to half a millisecond? Probably not, but even if it could, I don't think anyone would do that.