This might already be documented and known about, but I haven't seen it anywhere.
I was playing HeartGold and using a Dunsparce with Rage and Roost (and Defense Curl and Yawn, but those weren't used here so I assume they aren't important).
This happened twice (once in a double battle, once in a single). This is how it happened in the double battle, since I don't remember how it happened in the single battle:
1. Dunsparce uses Rage; Tentacool uses Acid
2. Opponent's Spinarak attacks so Rage's effect activates; opponent's Ledyba confuses Dunsparce with Supersonic
3. Dunsparce uses Roost
And this is where it got weird - Dunsparce used Roost WITHOUT going through the "Dunsparce is confused!" check. It just used used Roost and acted like the status was never there in the first place from then on.
My best guess is it's a temporary status overflow?? Like, you have the Rage status stacked on top of Roost's take-away-Flying-type status (even though Dunsparce has no Flying type to begin with) and that pushes the confusion out for lack of room? Idk.