I believe the problem was with my understanding of the Yield method. Yield seems to work existentially on facts: if a rule is matched, then a fact is added automatically. If a rule isn't matched, then that fact is automatically removed from the working set. My scenario was different. I had a price change. So all of the facts were already in the working set, I just had a situation where one of the facts was changed and I was expecting that to trigger a rule.
The proper solution appears to be manually checking to see if the fact exists, inserting it if it doesn't, updating it if it does. This seems to properly trigger the next rule in the chain to evaluate when the price is updated.