Я понимаю, что это сделано для улучшения перфоманса, не пытаюсь обвинить List. Но либо в List нужно добавить проверку на IMutableCollection, с которой он будет работать иначе, либо из ConcurrentDictionary убрать объявление ICollection. :)
кстати тут видно, что между чтением размера коллекции и копированием элементы могут испариться, но за обеспечение безопасности по отношению к другой коллекции должен отвечать вызывающий код