Logically it looks to be ok. I would think the cannon ball is being spawned twice during the on-shoot during certain instances due to the angle calcs.. try adding a "trigger once" system condition to the angle calculation sub-events if it will let you.
Didn't solve it, only make it sometimes not shoot at all.
I think the problem is in the bullet spray. It rotates the turret same time as it shoots, so maybe it sometimes rotates back and triggers again. Any other way of making a bullet spray?