add_url_rule() has logic that says that if the user has not included OPTIONS in their methods, flask will automatically provide an implementation.
Unfortunately, this logic is only triggered if the method string is OPTIONS in all upper case. So if you've included lower case "options" in your methods you will still end up with the flask-provided options functionality.
I think it should be a case-insensitive comparison since all the rest of the routing is all case-insensitive.