This may be by design, I'm not sure. However I did notify the engineering team of this behavior when an existing contact is used to fire an event. Currently the DE fields are only populated when firing an event with a new contact.
When using a new contact to fire an event, you can pull DE data into your email like:
Lookup("your_de_name","de_field_to_pull_in","de_field_to_match_on",_SubscriberKey))
This can also be used for existing contacts, but the DE field will already need to be populated before the event is fired.
Update: I'm told this is functioning as designed. A workaround would be to use the API in your custom trigger or activity to update the DE before the email is sent.
Update2: Two scenarios, 1: the event is fired with a new contact. In this scenario a DE row will be created and fields will be populated with values sent in the payload:
POST https://www.exacttargetapis.com/interaction-experimental/v1/events
Payload:
{
"ContactKey":"[email]",
"EventDefinitionKey":"[key]",
"Data": {
"EmailAddress":"[email]",
"foo":123,
"FirstName":"Dan"
}
}
In this scenario, assuming there is a FirstName field on the DE, FirstName will be populated with 'Dan'. The email will be sent with 'Dan' as the FirstName value. Use the lookup() function to pull it into the email.
Scenario 2: A row with Dan's email address already exists in subscribers and the DE. In this case, FirstName in the payload will be ignored. The email is sent and whatever value was in the FirstName DE field will remain, even though a value was included in the payload.
To me it helps to think about an Event Entry Source as sort of an equivalent to a Triggered Send Definition, whereas an Audience Entry Source is more similar to an Automation containing a User Initiated Send (obviously the difference being that they occur in Journey Builder, enabling you to string together a longer series of communications/actions).
With an Event Entry Source, you can trigger the first message in a journey in real-time via API. With an Audience Entry Source, you can certainly get close to real-time if your data extension is populated in real-time and your supporting Automation is run every 15 minutes or so. However, typically if your data extension is populated in real-time, that would indicate it is happening via API call and therefore why not just use an Event Entry Source via API?
There certainly are some overlapping cases where either would suffice, but in short I would think about an Event Entry Source as an optimal choice for real-time triggering via API. Though an API call is not required to fire an Entry Event Source, if you don't use the API (at least on a Contact Event Type), you would still have to schedule the refresh via Automation, so at that point it's kind of "six of one, half dozen of the other". Worth noting that Event Entry Sources do come with some handy pre-built Event Types, such as Date Based Events (for easy Anniversary or Birthday campaigns), Salesforce Data for cross-cloud integrations, etc.
The reality is, the answer is probably mostly dependent upon your data availability/latency and/or ability to trigger a journey via API.
Best Answer
Once you drag an ad audience activity to the canvas, set it up, and put spend behind the ad, the journey must be ACTIVATED before the FB audience can populate contacts. This is also true with ad campaign activities.
Why? Marketing Cloud requires at least 20 FB matches before it can create an audience.
How does it work? It takes the contacts in your entry event (data extension, cloud page, API, etc), hashes your 1st party data, and sends it to FB. FB tries to find matches based on the customer's email address.