DNM: Task Queue Compacting and Task Ordering

TBA...
The index pointer manipulation here is error prone and not 'obviously correct'.

These lists are tiny, consider an alternative insertion sort style:
Psuedocode:

List<Task> newQueue =...

foreach (Element e in taskQueue) {
 if (newQueue.IsEmpty) {
   newQueue.Add(e);
   continue;
}

 switch (newQueue.Last.Compare(e))
{ 
  either add it, remove something from new queue, or drop it
}
}