I vote for the option 1.
I did for one of my event handler..Did you try "on published" event?
projectSvc.QueueUpdateProject(jobUid, SessionUID, projectDss, false);
//WaitForQueue(q, jobUid);
jobUid = Guid.NewGuid();
projectSvc.QueuePublish(jobUid, e.ProjectGuid, false, string.Empty);
jobUid = Guid.NewGuid()
Cheers. Happy troubleshooting !!! Sriram E - MSFT Enterprise Project Management