%-variables, stored in local memory of the current process.

Process-private globals, implicitly stored in database CACHETEMP. 

It means, that when you use %-variables, you limited by the memory of your process, (which can be increased programmatically by the way). While Process-private global works exactly as simple global and limited only by free size on the disk. 

And also you should remember that you can not store objects in global variables, even if it is Process-private one.

Access to process-private variables also could be a bit slower than %-variables.

Looks like you forgot to define web application for your REST Service.  Please look at the documentation. And at this part:

Each subclass that has its own entry point must have its own CSP web application. You define the CSP web application and specify its security for on the Management Portal’s [Home] > [Security Management] > [Web Application] page, which you can access by clicking System AdministrationSecurityApplications, and Web Applications. When you define the CSP web application, you set the Dispatch Class to the name of the custom subclass of %CSP.REST and specify the first part of the URL for the REST call as the name of the application.

When you export and import this class to another namespace(s), you will have multiple different copies. I think much better to have the same class in all namespaces. You can do it with package mapping. And here you have two ways create a mapping in the each namespace where you need access to this class, or create special namespace %ALL, and configure mapping which will be available in all namespaces (except DOCBOOK and SAMPLES).