I think you might need to get both Events 4016 and 5016 show the start and end of processing of groups of policies, including how long it took to apply each one in the end event. You’d get a DateWritten for each, and you’d need to calculate the difference. Unless 5016 does in fact have a duration, which you’d need to extract somehow.
But, if you get the duration, and you emit that as an object:
[pscustomobject]@{Duration=$whatever}
Then you can pipe your ForEach to Measure-Object and ask it to -Sum the -Property Duration for you.