Currently record in EmailLog table is created after "kEmailSendingHelper::Deliver" method is called. This approach is correct in most cases, but when email is placed into email queue and is sent later via cron, then log record is created immediately.
I propose to create "kEmailSendingHelper::setLogData" method, that should accept EmailLog table fields (e.g. fromuser, event, EventParams) and store all given data in "kEmailSendingHelper::_logData" attribute. Add new field LogData to EmailQueue table and store "kEmailSendingHelper::_logData" attribute contents in case, when email is placed into queue. In case, when Deliver method is called it will use log data stored before to create log record. Method "kEmailSendingHelper::Clear" should also clear log data stored before.