The reason is this:
class Interpreter
def used_item(id)
flag = id == $game_temp.key_item
$game_temp.key_item = 0 #<============= This
return flag
end
end
The item you select is stored in $game_temp.key_item. Then, when you call used_item the first time, it will clear out the $game_temp.key_item with a zero. Thus, using used_item a second time will compare your ID with a zero...so it will always fail.
You can remove this offending line from the script, but I would suggest that, in all your events using the script call used_item, to put another script call
somewhere near the end of it.