I realize this is an old question, but I recently battled with this same issue from a Core Service perspective and wanted to share the route I took (and possibly someone will point out where I may have gone wrong before I deploy this to production).
After attempting a few different approaches with Core Service, I settled on adding a final manual activity to my workflows and custom logic to the preceding automatic activity. In the automatic activity's Core Service logic, I finish the current automatic activity (which returns the final manual activity instance), impersonate the original author, start the final activity instance (as the author) and finish that final activity instance (again, as the author).
I am using the SessionAwareCoreServiceClient and running on the Content Manager machine itself. I had to add "NT AUTHORITY\SYSTEM" to the Impersonation Users in the Tridion Content Manager configuration utility (there could be security implications using Impersonate, so make sure it makes sense for your environment):

The code looks something like this (although I've left out some things like getting the current activity instance, retrieving the original author from the first manual activity and I added the using SessionAwareCoreServiceClient to give some context):
using (SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient())
{
ActivityFinishData activityFinish = new ActivityFinishData()
{
Message = message,
NextAssignee = new LinkToTrusteeData() { IdRef = authorUser.IdRef }
};
// Finish current automatic activity
ActivityInstanceData finalActivity = client.FinishActivity(activityInstance.Id, activityFinish, new ReadOptions());
// Impersonate original author
client.Impersonate(authorUser.Title);
// Start final (manual) activity as author - if you don't start it, then non-Administrators can't finish them.
client.StartActivity(finalActivity.Id, null);
// Finish final (manual) activity as author
client.FinishActivity(finalActivity.Id, activityFinish, null);
}
Hopefully I'm not doing anything too terribly stupid and possibly this answer will help someone like myself that had to cobble it together from various other questions/blogs/references and perform a bit of trial-and-error (which can get tedious with workflow).