Do the following:
1. Assume the keyboard shortcut for forward windows cycling is "<Alt>Tab".
2. Assign a keyboard shortcut for reverse windows cycling, that does not contain the modifiers of the forward cycling shortcut, for example "<Shift>Tab" (it does not contain "<Alt>".
3. Cycle forward through windows. Everything's fine.
4. Cycle backward through windows -> Cycling stops after the first press on "Tab".
In my opinion, the error is in the function clientCycleEventFilter() in file cycle.c
At two locations the modifier for forward cycling is checked, but not the modifier for reverse cycling.
I can easily reproduce, as soon as you start playing with the shortcut the Tab window isn't kept open or the shortcut doesn't work at all.
For example, set a shortcut for reverse cycling than delete it -> when you use the shortcut for cycling it will jump to the next window and close the Tab window.
But that's by design actually, reverse cycling should include forward cycling shortcuts, otherwise you cannot cycle forward/backward without closing the cycle window (since the window is selected as soon as the user releases the modifier used to initiate the cycling).
If you define <mod1>+<key1> for forward cycling and <mod2>+<key2> for backward cycling, there's no way you can switch from forward to backward without releasing the requires modifiers.
The goal here is not to have two different shortcuts for forward and backward.
Now fixed in xfce-4.8 and master
You, sir, are awesome :)