Thank you very much for posting the solution - we encountered the same issue of the server returning text/json;charset=UTF-8 for JSON responses. And your patch works.
Just wondering, have you submitted a pull-request for this fix?
I'm surprised more people aren't encountering this issue. Also, the description in Trac ticket #7708 doesn't quite seem to match up with what I was experiencing... content area wouldn't appear if any link, either on the left hand menu or the site tree were clicked. Would only appear after a full refresh. I guess that makes sense, as a full refresh isn't a JSON request and the issue is related to the JSON response Content-Type.
After switching to nginx/php54-fpm configuration and upgrading to the latest silverstripe release (3.0.3) I have found a new problem with in the admin-section of Silverstripe. I think, it is related because the output in the browser is the same as posted some months ago (also see screenshot). Loading the "Products" -Tab admin-section is no problem until clicking within the form and thus firing a xhr request. Using firebug I found that the content-type of the returned data is set to text/html even though the returned content is json encoded. I alreday extended the mime.types of the nginx-configuration but had no luck. reloading the whole page fixes the prolem.
Had the same issue in 3.1.2 with uncle cheese's event calendar module. Turns out there was a space/line in one of the php files in the module.
Just submitted a request to fix it on github, hopefully not too many others are having the same problem!!