I'd suspect your web server is setting a limit on request sizes - we've encountered similar things when deploying on nginx, which imposes a 1 Mb limit on requests out-of-the-box. (For nginx, the relevant setting is client_max_body_size
.) If you're seeing a plain 500 Internal Server Error page rather than a Django error, that does suggest that the error is happening at the web server level rather than within Django... you'll hopefully get a more informative error message if you check the web server's error log.
One easy check you can try is to upload the same files in Wagtail's 'Documents' area - this doesn't do any kind of processing on the files (it only stores them), so if the uploads are still failing there, that eliminates Pillow from the possibilities.