Program: 52048
Project: 52048
Buggy source:
public void evaluateHand(){
  byte tallyValues[]=new byte[14];
  byte tallySuits[]=new byte[4];
  byte fours=0;
  byte threes=0;
  byte pair1=0;
  byte pair2=0;
  for (int i=0; i < 5; i++) {
    tallyValues[cards[i].getRank()]++;
    tallySuits[cards[i].getSuit()]++;
  }
  for (byte i=13; i > 0; i--) {
    if (tallyValues[i] == 4) {
      fours=i;
    }
 else     if (tallyValues[i] == 3) {
      threes=i;
    }
 else     if (tallyValues[i] == 2) {
      if (pair1 == 0)       pair1=i;
 else       pair2=i;
    }
  }
  List<Byte> sortedCardValues=new ArrayList<Byte>();
  for (byte i=0; i < 5; i++) {
    sortedCardValues.add(cards[i].getRank());
  }
  Collections.sort(sortedCardValues);
  float tempRank=0;
  if (sortedCardValues.get(0) + 4 == sortedCardValues.get(4) || (sortedCardValues.get(4) == 13 && sortedCardValues.get(0) + 3 == sortedCardValues.get(3))) {
    pattern="String_Node_Str";
    tempRank=56 + sortedCardValues.get(4) + (float)sortedCardValues.get(3) / 100;
    for (byte x=0; x < 4; x++) {
      if (tallySuits[x] == 5) {
        tempRank+=56;
        pattern+="String_Node_Str";
      }
    }
  }
  if (fours > 0) {
    tempRank=98 + fours + calcAddValue(sortedCardValues,100,fours,0);
    pattern="String_Node_Str";
  }
 else   if (threes > 0) {
    if (pair1 > 0) {
      tempRank=84 + threes + (float)pair1 / 100;
      pattern="String_Node_Str";
    }
 else {
      tempRank=42 + threes + calcAddValue(sortedCardValues,100,threes,0);
      pattern="String_Node_Str";
    }
  }
 else   if (pair1 > 0) {
    if (pair2 > 0) {
      tempRank=28 + pair1 + (float)pair2 / 100 + calcAddValue(sortedCardValues,10000,pair1,pair2);
      pattern="String_Node_Str";
    }
 else {
      tempRank=14 + pair1 + calcAddValue(sortedCardValues,100,pair1,0);
      pattern="String_Node_Str";
    }
  }
  if (tempRank == 0) {
    for (byte i=0; i < 4; i++) {
      if (tallySuits[i] == 5) {
        tempRank=70 + sortedCardValues.get(4) + (float)sortedCardValues.get(3) / 100 + (float)sortedCardValues.get(2) / 10000 + (float)sortedCardValues.get(1) / 1000000 + (float)sortedCardValues.get(0) / 100000000;
        pattern="String_Node_Str";
      }
    }
  }
  if (tempRank == 0) {
    tempRank=sortedCardValues.get(4) + (float)sortedCardValues.get(3) / 100 + (float)sortedCardValues.get(2) / 10000 + (float)sortedCardValues.get(1) / 1000000 + (float)sortedCardValues.get(0) / 100000000;
    pattern="String_Node_Str";
  }
  handValue=tempRank;
}

Fixed version (ground truth):
public void evaluateHand(){
  byte tallyValues[]=new byte[14];
  byte tallySuits[]=new byte[4];
  byte fours=0;
  byte threes=0;
  byte pair1=0;
  byte pair2=0;
  for (int i=0; i < 5; i++) {
    tallyValues[cards[i].getRank()]++;
    tallySuits[cards[i].getSuit()]++;
  }
  for (byte i=13; i > 0; i--) {
    if (tallyValues[i] == 4) {
      fours=i;
    }
 else     if (tallyValues[i] == 3) {
      threes=i;
    }
 else     if (tallyValues[i] == 2) {
      if (pair1 == 0)       pair1=i;
 else       pair2=i;
    }
  }
  List<Byte> sortedCardValues=new ArrayList<Byte>();
  for (byte i=0; i < 5; i++) {
    sortedCardValues.add(cards[i].getRank());
  }
  Collections.sort(sortedCardValues);
  double tempRank=0;
  if (sortedCardValues.get(0) + 4 == sortedCardValues.get(4) || (sortedCardValues.get(4) == 13 && sortedCardValues.get(0) == 1 && sortedCardValues.get(0) + 3 == sortedCardValues.get(3))) {
    pattern="String_Node_Str";
    tempRank=56 + sortedCardValues.get(0);
    for (byte x=0; x < 4; x++) {
      if (tallySuits[x] == 5) {
        tempRank+=56;
        pattern+="String_Node_Str";
      }
    }
  }
  if (fours > 0) {
    tempRank=98 + fours + calcAddValue(sortedCardValues,100,fours,0);
    pattern="String_Node_Str";
  }
 else   if (threes > 0) {
    if (pair1 > 0) {
      tempRank=84 + threes + (float)pair1 / 100;
      pattern="String_Node_Str";
    }
 else {
      tempRank=42 + threes + calcAddValue(sortedCardValues,100,threes,0);
      pattern="String_Node_Str";
    }
  }
 else   if (pair1 > 0) {
    if (pair2 > 0) {
      tempRank=28 + pair1 + (float)pair2 / 100 + calcAddValue(sortedCardValues,10000,pair1,pair2);
      pattern="String_Node_Str";
    }
 else {
      tempRank=14 + pair1 + calcAddValue(sortedCardValues,100,pair1,0);
      pattern="String_Node_Str";
    }
  }
  if (tempRank == 0) {
    for (byte i=0; i < 4; i++) {
      if (tallySuits[i] == 5) {
        tempRank=70 + sortedCardValues.get(4) + (double)sortedCardValues.get(3) / 100 + (double)sortedCardValues.get(2) / 10000 + (double)sortedCardValues.get(1) / 1000000 + (double)sortedCardValues.get(0) / 100000000;
        pattern="String_Node_Str";
      }
    }
  }
  if (tempRank == 0) {
    tempRank=sortedCardValues.get(4) + (double)sortedCardValues.get(3) / 100 + (double)sortedCardValues.get(2) / 10000 + (double)sortedCardValues.get(1) / 1000000 + (double)sortedCardValues.get(0) / 100000000;
    pattern="String_Node_Str";
  }
  handValue=tempRank;
}