I did the same with my Mil about ten years ago when dd was 6/7.
Her binge drinking and behaviour when pissed was unacceptable, dh was fully on my side eventually but it took a long time, he could see she had a problem but felt she wouldn't put any of the kids at risk but he agreed with me and they spent time together in places where you cant buy or steal alcohol, all his family were adamant she didn't have a problem and I'm convinced they hated me at one point but having grown up with a binge drinking Dad and the shitty behaviour I wasn't having my child witness it.
I could write paragraphs and paragraphs of all the things she did but they include everything you've written, she stole alcohol when I was putting washing away and that's when I stopped her coming to the house, also every single birthday party or celebration had a dark cloud over it wondering if this is gonna be one of the times mil ruins it by getting so shitfaced she falls over, or kicks off.
I actually stopped planning big family things like that because I couldn't exclude her but the kids would be upset seeing her get like that. Everyone said she'd never hurt the grandkids, and she knowingly wouldn't but when she's sneaking off to the toilet with a hip flask, (something dhs family said I was making up) I simply didn't trust her, and I was right not to because she did end up putting her baby granddaughter at serious risk.
It's very hard to tell if you can't see what dh does because of your bond with her or if he's being a tit but I can see why he doesn't want her visiting so soon after her behaviour at Xmas and because he knows it's not a one off if ahe has form for it.
Did she apologise to him and mean it? Is there still tension between them? I can see why you want her there but I can also see why he doesn't.