Yes, that can happen when there are two concurrent pushes into ACDL at very, very, very, very close intervals.
When you push into the ACDL, this happens:
push object into ACDL --> ACDL script re-evaluates its internal computed state --> ACDL variables are now available from the computed state for use as data elements
But when there are multiple, concurrent pushes that occur one after the other immediately, then it is possible that ACDL is still re-evaluating its computed state for an earlier push when a later push occurs. By the time ACDL's computed state is ready to be used in data elements, it would have all of the pushed data at the same time.
One workaround that I've tried is to push "eventInfo" objects and use the data there in my Rules. "eventInfo" objects are reserved in ACDL and don't get evaluated into the computed state.
adobeDataLayer.push({
'event': 'first push',
'eventInfo': {
'variable': 'foo',
},
});
adobeDataLayer.push({
'event': 'second push',
'eventInfo': {
'variable': 'bar',
'anotherVariable': 'baz',
},
});
The drawback with this method is that you have to use custom code to get the "eventInfo" data, because the ACDL extension doesn't have any data element to get it. So, in your Rule where you have a ACDL "Pushed Event" event, you can use this custom code to get the data:
// `event` is the event object returned by the ACDL Pushed Event
s.eVar7 = event.message.eventInfo.variable;
See if that works for your situation.