CiviMail and Smart Groups: when does CiviCRM identify the actual list of email recipients?
CiviMail does this at the time when the mailing is created, i.e. when the groups are chosen etc.

The primary reason behind this is to account for permissioning and what contacts to send the mailing to. Doing so at mailing creation time is relatively easy, since we know the contact id of the user, and hence know what contacts the user has permission to send mail to.

It gets a lot more complicated (but not impossible) to do this during mail delivery, primarily because the cron job will need to evaluate the groups in the context of the person who created the mailing