Actually, in the current MS implementation of Count(IEnumerable) there's a shortcut looking if the IEnumerable is an ICollection and calls Count on it. So the performance should be comparable for counting elements.
ToList and ToArray are a bit the same. If the IEnumerable is a ICollection, then the CopyTo method is called instead, which is a bit faster.
So, choose what makes your code the most readable, and benchmark for YOUR use case to have a definite answer.
Update:
I did a naive benchmark.
Starting with an Array: var items = Enumerable.Range(1,1000).ToArray();
- calling ToList() : 25ms / 10000
- calling ToArray() : 23 ms / 10000
Starting with an IEnumerable: var items = Enumerable.Range(1,1000);
- calling ToList() : 168ms / 10000
- calling ToArray() : 171 ms / 10000
So basically you get comparable performance.