It looks like Loop is being called from elsewhere in the sketch, as I don't see an actual for/while/etc. loop in it. Since you declared Flag as a global variable, is it possible that the value of Flag on entering Loop is not what you are expecting?
One approach to fix this might be to eliminate Flag and use a digitalRead(Led) to retrieve the current state in the if statements - e.g.
if(!digitalRead(led) && digitalRead(button1)) { //Led is off, button 1 is pressed, turn on the led
digitalWrite(led,HIGH);
} else if (digitalRead(led) && digitalRead(button2) { //Led is on, button 2 is pressed, turn off the led
digitalWrite(led,LOW);
}