@Alexander Whitmore After further review on one of our test pipeline, I could see the same End(UTC) 1/1/1601, 12:00:00.000 AM. Seems that its a generic end time for any pipeline run entries for other than Succeeded or Failed status.
Please be aware that for any run it would have at least 3 entries in the ADFPipeline table for Queued, In Progress and Succeeded status (for a successful run) . The alert should trigger correctly based on the interval you set, however when you try to run the query from the alert email (that too after the fact probably after a day or so) it would run based on current time - start time of pipeline which would be greater than 120 mins at that time and show all pipelines irrespective .
ADFPipelineRun
| where Status =="InProgress" // Pipeline is in progress
| where RunId !in (( ADFPipelineRun | where Status in ("Succeeded","Failed","Cancelled") | project RunId ) ) // Subquery, pipeline hasn't finished
| where datetime_diff('minute', now(), Start) > 120 // It has been running for more than 120 minutes
You might have to tweak the query to understand the run's which are successfull
ADFPipelineRun
| where Status =="Succeeded" // Pipeline is succeeded
| where datetime_diff('minute', End, Start) > 120 // It took more than 120 minutes to run
Hope this information helps.