Background
As far as I understand you are using your array in two partitions.
The first partition contains the heap, and the second partition (which starts empty) contains the sorted values.
During HeapSort the size of the first partition decreases, and the second increases until you have a sorted array.
Bug
The problem is that when you run MinHeapify you have not told it that the length of the heap has decreased so it is trying to heapify some of your sorted nodes.
Fix
You are keeping track of the size of the heap in entry input[0] so this should be easy to fix.
Try changing:
if (left < input.Length && input[left] < input[index])
smallest = left;
else
smallest = index;
if (right < input.Length && input[right] < input[smallest])
smallest = right;
to
if (left <= input[0] && input[left] < input[index])
smallest = left;
else
smallest = index;
if (right <= input[0] && input[right] < input[smallest])
smallest = right;