Ah. Yes. I know it's counter-intuitive, but I believe that your user context's role needs to have 'Manage Roles' at the Org level in order to use the GET roles API call. I have followed up with dev staff on why this is, and the counter-intuition here is down to language for description and not necessarily a flaw in intent.
The 'See Roles and Permissions' perm is intended to be the general permission that lets a user see the 'Roles and Permissions' tool at all in their tool selection fly-out in the Web UI. To be able to see the list of roles and permissions in the Web UI, the user will also have the ability to change them -- we don't really have a concept in the Web UI of having access to that list without the ability to manage the list (modify it).
Therefore, the call in the API that gives you access to the list is governed by the same permission that would let you see the list in the Web UI: not See Roles and Permissions, but Manage Roles and Permissions.
I will update the docs to be a bit more clear for this call, because clearly this is an area where the wording used could lead people to fall into exactly the same problem you've encountered here.