Sorry for the late reply, I'm rather busy these days and won't be able to produce a fix right away.
Actually I was a bit doubtful at first if a fix was needed at all. CopyTo(array, index) is an ICollection method whose MSDN documentation clearly states that it SHOULD throw an ArgumentException if "index is equal to or greater than the length of array". If array is empty, an index of zero is illegal according to that rule.
So you might argue that the template is correct and the Microsoft class is wrong!
However, you have a good point with ArrayList.CopyTo(array). This one shouldn't throw if array is empty as long as the ArrayList is empty, too.
Seeing that I'll have to fix this anyway I'll reproduce Microsoft's undocumented ICollection.CopyTo behavior as well, in all the templates, as soon as I get around to it.