Went back to throwing real 500s

Basically this comes down to not splitting how the app returns errors.
Having errors that are 200s and labeled in the body rather than having them be 500s
makes things unclear; for users, and makes it more difficult for them to handle the errors.