These two questions give similar algorthims for shuffling an IEnumerable:
The first doesn't compile, although it's apparent that you're trying to reify the enumerable, and then implement Fisher-Yates; that's probably the correct approach, and it shouldn't be unclear to anyone who has ever shuffled an array before. The second using RemoveAt is bad for the reasons stated by other commenters.
EDIT: Your top implementation looks like it's correct now, and it's a good way to do it.