When trying to install a new plugin, it is only successful if we remove the section 'lifecycle' from the manifest. The failure must happen somewhere between the GET request for the manifest and the POST request for the 'install' endpoint.
In our plugin backend logs we can see the following:
POST /lifecycle/install 415 Unsupported Media Type
GET /manifest 200 OK
And inside the browser logs we get
BUT: The response header in our 'install' endpoint is clearly set to 'content-type: application/json. So we do not understand why the error message is "Expected JSON".