So I came across an interesting error today that I thought was worth mentioning. This very a very vague error and not at all useful. There is a helpful blog post by Matt Wrock here. Although my issue was different, it did give me some ideas on what was going on. Apparently, to discover the issue, Matt used a tool called PEVerify. This apparently loads your code gives you more information than the normal debugger does. It is shipped with .NET.To learn more about it, there is a SO answer here.
So Matt’s issue turned out to be that the stack was expecting a string and was passed a List<string>. This is because of the string (which is of type IEnumerable, but in the namespace System.Collections.IEnumerable). Even though the List<string> is IEnumerable, it is actually of type IEnumerable<T>. The generic IEnumerable<T> is in namespace System.Generic.IEnumerable. Thus, the namespaces are a mismatch and therefore the runtime failure.
So the lesson learned here is to make sure you use the same exact object and namespace. If you are using a generic object or interface, make sure that what your are passing in supports generics. A string array does not in this case under the .NET 2+ SDK. The theory is that it thinks this might be a potential unsafe type causing the trust issue.
How to Fix this;
The easiest way to fix this issue is to force the array into a list by doing a .ToList() on the array. This will make the list a List<T> aka in this case List<string>. This will force the cast and you will be on your merry way. Basically, behind the scenes, .NET does a for loop that loops through the array in the normal convention (for ( int count =0; count < array.Count(); count++) ) and adds each item to a List<T> and returns that list to the caller. This will make sure you get the exact match you are looking for.
Hope this helps someone else with their issues!