!=not distributed by ||, which combines two complete expressions. Once this is fixed, you need to use &&instead ||.
while [[ "$UserChoice" != "1" && "$UserChoice" != "2" ]]
Actually, it bashsupports pattern matching, which can be used similarly to what you had in mind.
while [[ $UserChoice != [12] ]]
extglob ( [[ ... ]], bash 4.2, ), - , :
while [[ $UserChoice != @(1|2) ]]