申し訳ありません。他の人も同じ問題を見つける場合に備えて、ここに残しておきます。
実際に送信されたHTTPリクエストをデバッグしたところ、PythonがPUTデータを"post=raw&post=edit_reason"として送信していることに気づきました… requests.put()呼び出しでdata=dataをjson=dataに置き換えたところ、問題が解決しました。
申し訳ありません。他の人も同じ問題を見つける場合に備えて、ここに残しておきます。
実際に送信されたHTTPリクエストをデバッグしたところ、PythonがPUTデータを"post=raw&post=edit_reason"として送信していることに気づきました… requests.put()呼び出しでdata=dataをjson=dataに置き換えたところ、問題が解決しました。