Method to get next available filename
I don't understand why you want to pass a list of files. Simply check the existence of your filename candidates. Start with the base filename. If it does not exist, start counting. In my eyes this a straightforward approach and therefore easy to understand.

public string GetNextAvailableFilename(string filename)
{
    if (!System.IO.File.Exists(filename)) return filename;

    string alternateFilename;
    int fileNameIndex = 1;
    do
    {
        fileNameIndex += 1;
        alternateFilename = CreateNumberedFilename(filename, fileNameIndex);
    } while (System.IO.File.Exists(alternateFilename));

    return alternateFilename;
}

private string CreateNumberedFilename(string filename, int number)
{ 
    string plainName = System.IO.Path.GetFileNameWithoutExtension(filename);
    string extension = System.IO.Path.GetExtension(filename);
    return string.Format("{0}{1}{2}", plainName, number, extension);
}