Controller action throws a 500 error in some environments
Brad's comment above helped us find the solution.  I had been looking at the craft.log file in the control panel at /admin/utils and it doesn't output the stack trace.  Look at the actual log file, we got more info on the issue which was that the ajax call was returning:

[status code] 401
[reason phrase] Unauthorized


The plugin on the site we have was trying to render a front-end template using Guzzle and the dev site is password protected, and the request was not making it through.

Possible solutions include:


Updating the way the template is being processed to not require a front-end request
Only use this functionality in locations that are not password protected
Hurry up and finish the massive overhaul of the plugin you are working on so this issue doesn't exist any longer!


#3 it is!