Seeed Studio 2.8in TFT Screen v1 Glitch

I am making a clock for a fictional time and calendar for Ceres (dwarf planet) as an extension to a school project. I am using a SeeedStudio 2.8in Touch Shield v1 from RadioShack stacked on a Sparkfun Red Board. My code seems to be functional when I upload the sketch, it displays the Ceres time and date. But a second later, it covers the screen with whatever color was used to draw the last piece of text. It does not cover the bottom .5cm though. The example codes work fine, so I think my code is bad. I have never had this problem before though. The code is very large, could that be causing problems? Could the timer interrupt be messing it up? Here is my code:

#include <stdint.h>
#include <TouchScreen.h>
#include <TFT.h>
// Ceres_Clock
// By Alexander Pope
// To run this sketch hook up a Seeed Studio v1 2.8" Touch Shield 
// to a Sparkfun Redboard or an Arduino Uno.

// Time Variables:
int aSec = 0;               // Astrosecound
int aMin = 0;               // Astrominute
int aHr = 1;                // Astrohour
int aDay = 1;               // Astroday (day of mounth)
int dayName;               // Day Name in Char Array

// Display Loop Variables:
char* dayNames[] = {"Alpha", "Beta", "Gamma", "Unus", "Duo", "Tres", "Un", "Deux", "Trois"};
char mounth[5] = "Vena";    // HAHA! Only one mounth, but no one will ever know.
boolean update = true;      // To tell the loop to update or not to update the display
char time[6];               // What time is it!?!?

// Pin Definitions for Seeed Studio TFT Shield v1 (Uno or RedBoard only):
#define YM 14               // (Y-) For shield use pin 14 or A0
#define XM A1               // (X-) For shield use pin A1 only
#define YP A2               // (Y+) For shield use pin A2 only
#define XP 17               // (X+) For shield use pin 17 or A3


void setup() {
  // Disable Global Interrupts:
  cli();
  
  // Initialize Timer1:
  TCCR1A = 0;    // Set the Entire TCCR1A Register to 0
  TCCR1B = 0;    // Set the Entire TCCR1B Register to 0
  TCNT1 = 0;      // Initialize counter value to 0
  
  // Set the Compare Match Register to desired timer count:
  OCR1A = 11957;
  // Turn on CTC mode:
  TCCR1B |= (1 << WGM12);
  // Set CS10 and CS12 bits for 1024 prescaler:
  TCCR1B |= (1 << CS12) | (1 << CS10);  
  // Enable Timer Compate Interrupt:
  TIMSK1 |= (1 << OCIE1A);
  
  // Enable Global Interrupts:
  sei();
  
  // Initialize the TFT Library:
  Tft.init();
}

void loop() {
  if(update) {
    updatescreen();
  }
}

// Bot to roll over time
void RollOverBot() {
  aSec = 0;               // Since the secounds rolled over, set them to 0.
  
  if(aMin == 49) {        // If the minutes should roll over,
    aMin = 0;             // then set the minutes to 0,
    
    if(aHr == 10) {       // and check if the hours should roll over.
      aHr = 0;            // If they should, set the hours to 0,
      aDay++;             // and increment the day.
    }
    else {                // If the hours shouldn't roll over,
      aHr++;              // increment the hours.
    }
  }
  else {                  // If the minutes shouldn't roll over,
    aMin++;               // increment the minutes.
  }
  
  update = true;          // Now that we have finished updating things, 
                          // let the loop know it needs to redraw the time
}
  
void updatescreen() {
  
    // Convert time intigers into time char array:
    time[4] = '0' + (aMin % 10);                                    // Minutes Ones Place
    time[3] = '0' + (aMin / 10);                                    // Minutes Tens Place
    time[2] = ':';                                                  // Hour Minute Separator
    time[1] = '0' + (aHr % 10);                                     // Hours Ones Place
    time[0] = (aHr = 10) ? '1' : ' ';                               // Hours Tens Place
    
    // Convert date intigers into day name and date char array:
    int c = 9;
    while(c > 0) {
      if(aDay % c == 0) {
        dayName = c;
        c = 0;
      }
      else {
        c--;
      }
    }
    // Draw the time:
    Tft.paintScreenBlack();
    Tft.drawString(time, 20, 50, 3, CYAN);                 // Draw the time string
    Tft.drawString(dayNames[dayName], 20, 30, 3, CYAN);    // Draw the day string
    Tft.drawString("CERES MINING CO.", 60, 1, 3, BLUE);   // Draw the Name
}
    
// Timer 1 Interrupt
ISR(TIMER1_COMPA_vect) {
  if(aSec == 49) {        // If the secounds should roll over,
    RollOverBot();        // then "RELEASE THE ROLLOVER BOT," or just update the time.
  }
  else {                  // If the secounds shouldn't roll over,
    aSec++;               // increment the secounds.
  }
}

Any Ideas?

Take a look at the FreeMemory() function, sprinkle it around in your code, and use some Serial.print()'s to find out about your memory.

Reading through your code I'm stumped by this bit;

int c = 9; 
 while(c > 0) {
      if(aDay % c == 0) {
        dayName = c;
        c = 0;
      }
      else {
        c--;
      }

Reading through the logic of this. if aDay is between 1 and 9 (inclusive) it will make dayName equall to aDay. if aDay is outside these limits dayName will be a pretty random value.