OP_CODESEPARATOR is an actual executed instruction, not a declarative thing, so if it's wrapped in an OP_IF it can be turned off. Looks like we weren't testing this before.
Using this to implement Rivest's Paywords is left as an exercise for the reader. (seriously, this is the first time I've found something useful to do with OP_CODESEPARATOR right now)