There could be a race condition in your Rule vs the data element getting updated.
User performs the action that triggers the Rule.
The Rule runs.
The Rule gets the values from the data elements.
The web page code runs to update the data elements.
The Rule's action runs.
In the above scenario, the data elements got updated only after the Rule had executed at step 3. As a result, the Rule only knows of the old data element values, not the new ones that were set at step 4.
@koolswap - Are you triggering direct call rules, by chance? If so, maybe consider passing the data in as part of the event payload. That way, when you execute the rule, you're looking at the exact data you need and not having to wait for other logic to execute.
For example, let's say you have a direct call rule that you call "do-that-thing" and you want to pass in a color specific to each time it is called. To make this work, you'd make the following call:
The second parameter of the .track() call must be an object, and you can pass in whatever properties you need. The entire payload/object will be accessible inside the direct call rule as "event.detail". Any properties (eg// color) can be accessed by their names, for example: %event.detail.color%
This approach can be used to populate variables (props/eVars/etc), inform conditional logic, etc, and the value is specific to each time the direct call rule is invoked.