EDIT (as of 5/18/2020)
There has been a shift in how this works, so I wanted to adjust this answer to the correct information now. (Thanks for @James Sullivan and @Leto for bringing this to my attention).
BOTH User-Initiated Sends and Triggered Sends will not adjust any content inside of the email once the send job has been initiated. So, simply put:
- User-Initiated Send/UI Send: Once you schedule your Send or Push 'Send Immediately' a 'snapshot' of the email content is taken to help make the actual send later much quicker (think of how website 'caching' works. Same theory here). This means any edits made to the email AFTER the job is created and queued, will require you to cancel the existing send and recreate it.
- Triggered Send: Once you have started/published your Trigger Send, a 'snapshot' of the content inside the email has been taken. This means any changes will require you to pause, republish and then restart your trigger for this to take effect.
To expand on 'Snapshot', I mean that all content, including references to internal content (via AMPscript/SSJS [ContentBlockBy... functions] or the 'Reference Block' in the UI) and some external content (there are exceptions to this depending on what is used).
So changing a content block that is referenced by ContentBlockByID after the send job has been set will NOT change the content used for that block in that email job.
To expand on @TastyBurgers answer, it can be both depending on how you send the email.
An User Initiated Send and the Send Flow/Guided Send scheduled send (usually done through the UI) pull the most recent version of the email with the Email ID that was assigned to it. It will also send to the most recent data inside the list/data extension(s) assigned to it.
The Triggered Send Interaction will only send to the last published email creative, meaning if you edit the email creative assigned to the Trigger but never publish the changes, it will continue sending to the old version.