From a module, if I call module.exit_json() with a variable called rc with some value greater than zero, Ansible always treats the task as failed (despite me not having called module.fail_json()). Is there some way to override this from within the module? Is rc a bad name to return if I don't want this behaviour?
Yes :) That's basically how the module reports a failure.