There is no code anywhere above that sets PORTC to anything but 0xAA after the first interrupt, why do you think it should ever read anything else?; You never set it to anything else. Your code doesn't make PORTC only == 0xAA on a falling edge, it makes it equal 0xAA on the first falling edge, no other code listed does anything else to change this so once set to 0xAA it will stay there.
What specific compiler are you writing this in? Your C calls are very odd, such as the #asm("sei") this is generally included as a function in most C compilers, it equates to the same thing, but you should never explicitly call ASM in a C program like that unless you have good reason. the sei(); function does the same thing, and can be intercepted if need be by other code.