The BRE is one of the least understood parts of BizTalk server and after teaching Effective BizTalk again last week I was again confronted by why this is. When we first look at BRE one of the things that is not clear is what is meant by the forward chaining nature of a policy. This can be a tough one to get around. The policy is really sort of a graph and that graph has its own memory stack. When the rules that will fire are selected they are placed on the agenda and if they change the memory then all the rules in the policy will evaluate again. This is why there isn't looping the way we think of in BRE, but there is actually looping.
This rather obscure MSDN article gives us some of the answer: How to Iterate ArrayList in Business Rules
To make it work you will need add mscorlib (4.0 if you're on 2010) and your custom class to the class explorer of the business rules editor.
You can see here that rule A always fires (once) and asserts the array list into memory, this causes the policy to be reevaluated.
Rule B fires next and calls MoveNext (in the condition), get current, and update, which cause the policy to evaluate again.
At this point there is not a MyClass instance in the memory and rule C fires.
The upcoming book has a good example of using this, but I found this was the best way to explain the forward chaining nature of the BRE and how rules actually work.