Okay, figured it out - that was a completely unnecessary stumble...
So it's not just scopes that are public/member, it's also client IDs. Who would have thought? The error (invalid scope) doesn't make that clear, either (unless you already know that you can't use the member API which doesn't allow that scope).
I'm only sorry that I have sunk hours into this problem.
I'll add my thoughts regarding public/member client IDs:
1) I think it's counterproductive to only allow members to register for member access into sandbox. Even non-members could develop integrations using the sandbox.
2)
https://sandbox.orcid.org/developer-tools is a handy interface to show properties related to your client ID (app name, description, URL, redirect URIs). It's a pity that it doesn't work with member client IDs, too.
3) There should preferably be one way to request a client ID. The developer tools interface is nice, I suggest you just use that for both public and member client registrations (and show which type of client ID it is!).
I hope my comments help improve this for others who could run into this problem in the future.
P.S. It's not the first time I ran into non-transparent client ID types. With the ScienceDirect API, you get just a string, too and have no idea (and no way to check) what kind of authorizations they attached to it. I hope they improved theirs since I last checked.
Regards,
Ivan Masár