Checked through some code, here's some fixes for you.
1) Always check "fast conditionals" first if you use them often. Eg; CanInterrupt in Dependencies.cs. Check your custom setting *first* then check if the target is casting, and can be interrupted. You always want to "fail" as quickly as possible. (A quick boolean comparison is going to be faster than running through the memory wrapping API)
2) In "CreateCombat" (Main.cs), I'd suggest removing your string comparison code.
Code:
new PrioritySelector(ret => Default() && YBMoP_BT_Settings.Instance.cRotSelect == "Standard",
Change this to an enum if at all possible. String comparisons are slow, and should be avoided if possible. (Considering you have 2 values, I'd suggest just changing it to a bool value and be done with it)
3) You don't need to check the target's health % when casting Execute. (This is done for you in SpellManager.CanCast. Special conditionals on spells are checked by WoW itself)
4) Your checks for HS are bad. You may want to change
Code:
Cast("Heroic Strike", ret => Me.CurrentRage >= 110 || !TargetHpCheck() && ((DeadlyCalmAura() && Me.CurrentRage >= 30) || (MeColossusSmashAura() && Me.CurrentRage >= 40))),
To
Code:
Cast("Heroic Strike", ret => Me.RagePercent >= 90 || (!TargetHpCheck() && ((DeadlyCalmAura() && Me.CurrentRage >= 30) || (MeColossusSmashAura() && Me.CurrentRage >= 40)))),
RagePercent >= 90 takes care of the glyph. (I personally don't always use it, so your code will never dump rage with HS for me)
5) Storm Bolt requirements check... string comparisons, etc. Fix it. (I'd suggest making a switch statement if that's how you want to do it, as it'll be far faster)
6) I'm not entirely sure why you even check if you have a main hand when using heroic throw. Simply cast it if the user has it enabled. (CanCast will take care of the rest)
And the rest basically goes without saying. Just make the above suggested optimizations everywhere, and you should be set.