I believe that downcasting should be avoided if possible. If the class stores an input as a concrete class "Collection" (which means that this class works with "Collection", then I think the it is more natural to just accept an input of type "Collection" instead of the interface counterpart.
This shift the responsibility of downcasting (if needed) back to the consumer who should know what he is doing if he does downcast it.
On the other hand, I would say that accepting input as interface is better than a concrete class as it allows the flexibility of feeding in mock objects more easily. However, this would require the internals of the class depends on the interface rather than the concrete class (thus in the example, the member variable would be of IEnumerable instead of Collection).
I agree with yapiskan that Marc's solution actually has changed the usage by creating a copy of the input and thus there is a change in responsibility:
Before: the input is shared at all time between the consumer and this class. Therefore, change to the input is "shared" between the consumer and this class
After: this class's understanding of the input is detached from the consumer after the constructor is called.