1) Look at the CorrelatedTaskEvent class in the TaskSchedulerEditor library. I believe it meets your requirements. If not, the code for that class should give you some ideas on how to pull the history from the EventLog using your code.
2) The GetInstances method only gets running instances. For historical instances, you will have to pull them from the EventLog.
2) The GetInstances method only gets running instances. For historical instances, you will have to pull them from the EventLog.