В данном случае правила можно считать условием, пока не выполняться оба условия, метод в .Do() не будет вызван.
И не важно в каком порядке выполнятся правила.
По поводу срабатывания одного правила несколько раз.
Какая разница сколько сработает одно правило(условие)? Пока второе не сработает, обработчик не будет вызван.
Из справки:
Когда цена последней сделки будет выше 135000 И ниже 140000:
var priceMore = new Unit(135000m, UnitTypes.Limit);
var priceLess = new Unit(140000m, UnitTypes.Limit);
MarketRuleHelper
.And(new IMarketRule[] {Security.WhenLastTradePriceMore(priceMore), Security.WhenLastTradePriceLess(priceLess)})
.Do(() => this.AddInfoLog(string.Format("Цена последней сделки находится в диапазоне от {0} до {1}", priceMore, priceLess)))
.Apply(this);
Цена может очень долго болтаться ниже 135000. Т.е. постоянно будет срабатывать правило Security.WhenLastTradePriceLess(priceLess).
Но только когда цена поднимется выше 135000, сработает второе правило - Security.WhenLastTradePriceMore(priceMore), и только тогда вызовется:
this.AddInfoLog(string.Format("Цена последней сделки находится в диапазоне от {0} до {1}", priceMore, priceLess))