Jamás llegaré a comprender a que razonamiento llegan las personas para decidir que lo mejor es publicar una pregunta de C# en un foro de VB6...
...En fin.
-devolver cual fue la palabra que mas se repitio?
-Cuantas Veces se repitio ?
Puedes simplificar (que no optimizar) la tarea utilizando LINQ para agrupar los elementos del array según la cantidad de veces que se repitan, luego opcionálmente puedes ordenar los grupos según el valor de repetición, y por último añadirías la secuencia generada a un tipo de contenedor para darle un uso más amistoso, en este caso escogí el tipo Diccionario para denotar la ausencia de elementos (llaves) repetidos en la colección:
string[] arr = {"hola", "adios", "hola", "adios", "hola"};
Dictionary<string, int> countDict =
arr.GroupBy(str => str).
OrderByDescending(group => group.Count()).
ToDictionary(group => group.Key,
group => group.Count(), StringComparer.Ordinal);
KeyValuePair<string, int> max = countDict.First();
Console.WriteLine(string.Format("The most repeated element is \"{0}\" with a count of \"{1}\".", max.Key, max.Value));
Resultado de ejecución:
The most repeated element is "hola" with a count of "3".
Nota: Si quieres tener mayor control sobre el ordenamiento de los elementos de la colección, entonces utiliza el tipo
OrderedDictionary o
SorteredDictionary según tus necesidades.
¡Saludos!