I wonder if the problems could have something to do with having buttons mapped to Ctrl, Alt, and Shift. Allegro doesn't treat those as keypresses on their own, but ZC has code that specifically checks for them.

Scripts might also be a factor. I don't recall this ever coming up in 2.10, and that may well be why. The input variables interact directly with the internal control arrays. I've found that if I run this script:
Code:
global script UnpressA
{
    void run()
    {
        while(true)
        {
            Link->InputA=false;
            Link->PressA=false;
            Waitframe();
        }
    }
}
If A is assigned to Alt, I can press it repeatedly or hold it and it won't stop the screensaver from starting. If it's another button, keypressed() still returns true, so input_idle() behaves as expected. I've seen some other weirdness, but I haven't been able to make it hang.

I'll try having input_idle check key[] rather than ZC's regular controller functions. I'm not sure that'll fix it, but it can't hurt.