Hi,
it all depends on whether the function has to process the collection as a whole (like Sort-Object or Measure-Object) or every member separately (like Foreach-Object or Where-Object).
In the first scenario, the actual processing happens in the End{} scope, while the Process{} scope simply accumulates data coming in from the pipe into an array which then gets processed in the End{} block.
In the second scenario, the actual processing is done in the Process{} scope, and the parameter accepting pipeline input is treated as an array in that scope. So either the objects come from the pipe, then Proces{} gets executed multiple times but each time the array only has one member, or the objects get passed as an array so Process{} is only executed once but over an array containing multiple members.
Make sense?