Case 2 misses a break statement.
As I read this code I expect this to happen (assuming your debounce works as intended):
start up (Mode == 0): LED1 off, LED2 off.
Button press (Mode == 1): LED1 on, LED2 off.
Button press (Mode == 2): LED1 off, LED2 on, but then due to the missing break that becomes LED1 on, LED2 on.
Button press (Mode == 3): LED1 on, LED2 on.
Button press (Mode == 0): LED1 off, LED2 off.
Etc.