Almost everything you deducted so far is correct, but there is no error in the algorithm afaik.
00220205 ^ 75 F2 JNZ SHORT 002201F9 ; this is looks like conditional jump but actually ...
Do you really need to have the code behind the jmp table in the same section?
If so, this is something I never tried. Still a couple of possible pointers :
I think you best start with newbie crackmes, those small programs are much easier to start with, and they have a tutorial written for them in most cases.
If you search the dump for all places where the flag [40B114] is used, you find the addresses you mentioned, but also an interesting one at address [0040130A] ...