Preamble (altered to reflect comment trail)
With a rule NOT( ISNULL( Maintenance__c ) )
and workflow evaluation criteria of:
Evaluation Criteria : created, and any time it’s edited to subsequently meet criteria
The workflow rule only executes if the value of the field changes from null to nonNull or when the record is created.
The workflow will not evaluate at all if the Maintenance__c
changes from one non-null value to another non-null value as that won't "subsequently meet criteria" (true is still true). Note, for time-based workflows, the Every time it is edited
evaluation radio button is not available.
Once the time-based workflow is entered for the object, the object stays in that workflow until the time-based condition is no longer true (maintenance start date becomes null) or the time trigger finally happens (345 days after account.maintenance_start_date__c
). If the maintenance start date is changed on the Account, the time based trigger adjusts accordingly per the doc:
What happens if I update the value of a date field used in a time
trigger? If you update the date field used in a time trigger,
Salesforce recalculates the time trigger as long as the time trigger
has not yet fired and the recalculation does not reschedule the time
trigger to a date in the past.
For example, if a workflow rule alerts the opportunity owner seven
days before the opportunity close date and the close date is set to
2/20/2008, Salesforce sends the alert on 2/13/2008. If you update the
close date to 2/10/2008 and the current date is 2/2/2008 or before,
Salesforce reschedules the alert for 2/3/2008. The evaluation date of
pending actions is ALWAYS reevaluated and updated if necessary
irrespective of the rule criteria. Of course, if the rule is evaluated
to false, it does not matter as the actions are removed from the
queue.
If you were backdating to a date in the past, per the doc, the time trigger does not adjust
Best Answer
When using Workflow rules to trigger email alerts, activities are not automatically logged when the email is sent.
So to do this, have the Workflow trigger a task (in addition to the email alert that is sent). You can assign the task to the record owner, creator, a certain role, or a specific user. You can also set the task to "Completed" so it will just be used for tracking purposes.
Once the Workflow is triggered, the email will be sent and a completed activity will be logged on that particular record simultaneously.
You can also vote the idea here: Workflow email alerts to contacts should be recordable as activity history
Log an activity when using Workflow Rules to send email alerts