How to read TTL sensor every exact time interval?

So I am getting some readings, but I am also getting some very odd behavior when it comes to the gyroscope readings. Normally, if the gyro isn't calibrated correctly, it drifts, with the heading slowly increasing or decreasing when stationary. Now, it will drift for a few seconds, then jump a large amount of degrees, only to drift slowly again. It didn't do this before using the interrupt, but now it does. Any idea why?
The spaces in the video serial output are caused each time the angle is computed, and the value shown is printed at the end of the loop function, regardless of whether or not the angle was computed.
Since there is over 500 lines, I will only post the relavant bits. This video shows the behavior I am seeing: Issue with Timer Based gyro readings Arduino - YouTube

#include <avr/interrupt.h>  //include interrupts to use timer 2 overflow as internal interrrupt
#include <avr/io.h>
//#####################################
//Gyro vars
int gyroPin = A4;               //Gyro is connected to analog pin 0
float gyroVoltage = 5;         //Gyro is running at 5V
float gyroZeroVoltage = 2.425;   //Gyro is zeroed at 2.423V
float gyroSensitivity = .007;  //Our example gyro is 7mV/deg/sec
float rotationThreshold = 1;   //Minimum deg/sec to keep track of - helps with gyro drifting
volatile float currentAngle = 0;          //Keep track of our current angle
volatile int roundedAngle; //rounded angle for whole number use
volatile float gyroRate;
unsigned int count = 0;
volatile float ISRvalue;
volatile boolean canCheck = false;


//#############################################################################################
//Setup
//#############################################################################################
void setup()
{

  Serial.begin(9600); //Setup serial for debugging
  pinMode(5, OUTPUT); //Setup all digital pins that are permanant I/O
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  digitalWrite(10, HIGH); //Turn fan off. it defaults to on when LOW
  
    //Setup Timer2 to fire every 1ms
  TCCR2B = 0x00;        //Disbale Timer2 while we set it up
  TCNT2  = 130;         //Reset Timer Count to 130 out of 255
  TIFR2  = 0x00;        //Timer2 INT Flag Reg: Clear Timer Overflow Flag
  TIMSK2 = 0x01;        //Timer2 INT Reg: Timer2 Overflow Interrupt Enable
  TCCR2A = 0x00;        //Timer2 Control Reg A: Normal port operation, Wave Gen Mode normal
  TCCR2B = 0x05;        //Timer2 Control Reg B: Timer Prescaler set to 128
}


//#############################################################################################
//Interrupt Service Routine
//#############################################################################################
ISR(TIMER2_OVF_vect) { //Timer2 overflow interrupt vector, called every 1 ms
  count++;
  if(count > 99) { //how many ms to wait before doing this(0 based)
    // readHeading();  - don't use this, too much going on...
    ISRvalue = analogRead(gyroPin);
    count = 0; 
   canCheck = true; 
  }
  TCNT2 = 130; //set to 130 out of 255 (125 cycles)
  TIFR2 = 0x00; //restart timer
};

//#############################################################################################
//Gyro Code
//#############################################################################################

void readHeading()
{
  if(canCheck)
  {
  gyroRate = (ISRvalue * gyroVoltage) / 1023; //This line converts the 0-1023 signal to 0-5V
  gyroRate -= gyroZeroVoltage;  //This line finds the voltage offset from sitting still
  gyroRate /= gyroSensitivity;   //This line divides the voltage we found by the gyro's sensitivity
  if (gyroRate >= rotationThreshold || gyroRate <= -rotationThreshold) { //Ignore the gyro if our angular velocity does not meet our threshold
    gyroRate /= 10; //This line divides the value by 100 since we are running in a 10ms loop (1000ms/10ms)
    currentAngle += gyroRate;
  }
  if (currentAngle < 0) {  //Keep our angle between 0-359 degrees
    currentAngle += 360;
  }
  else if (currentAngle > 359) {
    currentAngle -= 360;
  }
  roundedAngle = currentAngle;
  roundedAngle = 360 - roundedAngle;
  //Serial.println(" ");
  canCheck = false;
  }
  return;
}



//#############################################################################################
//Check all sensors
//#############################################################################################
void checkSensors()
{

//I left out the functions for most of these sensors in this post. basically checkSensors() will run readHeading()
  leftEncoder(); //get encoder ticks
  rightEncoder();
  flameFLval = senseFlame(flameFLpin); //check all flame sensors
  flameFCval = senseFlame(flameFCpin);
  flameFRval = senseFlame(flameFRpin);
  flameBLval = senseFlame(flameBLpin);
  flameBCval = senseFlame(flameBCpin);
  flameBRval = senseFlame(flameBRpin);
  readHeading(); // check gyro
  frontUSdist = measureDistance(frontUSpin); // check all US sensors
  leftUSdist = measureDistance(leftUSpin);
  rightUSdist = measureDistance(rightUSpin);
  reflectVal = reflectSensor(); //check reflectivity sensor
  return;
}


//#############################################################################################
//Loop Code
//#############################################################################################

void loop()
{
  checkSensors();
  Serial.println(roundedAngle);
}