What is driving the zero crossing circuit? As you don't have a diode connected in reverse across the opto isolator input (to protect it against reverse voltage), I presume you are feeding it with low voltage from a transformer. If so, then you will probably get some phase shift in the transformer, which could explain what is going wrong. A solution would be to feed it directly from the mains (with a suitably-increased value series resistor of sufficient voltage rating, and the protection diode added) - but only if you are comfortable with doing mains-voltage wiring.
Did you consider a mosfet? I always thought SCR's were kinda jumpy.
Did you understand my comment about delayMicroseconds()? You don't check for that limit in your code yet.