This might take a while to explain, so bear with me:
I've got a perfect sphere. I've set up an arbitrary longitude/latitude ("angle") coordinate system on it (imagine an equator around the middle, with an arbitrary (0,0) on the equator). The coordinates are angles (longitude from $-\pi$ to $\pi$, and latitude from $-\pi/2$ to $\pi/2$).
In order to visualize what I want to do, I came up with this way of thinking about it: Imagine a sheet of graph paper pinned (through the middle) to the sphere at the origin (0,0). The graph paper cannot be rotated. The lines on the graph paper form a "grid".
The graph paper can be wrapped around the equator with no distortion (forming a cylinder), but wrapping it completely around the sphere will force distortion around the poles (imagine the graph paper scrunching up to fit at the poles). This is expected. It turns out (I think) that the graph paper can be wrapped around any equator (with any arbitrary origin), so long as that equator includes the pinned point. Of course, wrapping it around a different equator will yield distortion at different poles (those relative to that equator), with no distortion at all along that equator.
Now, pick any point on the sphere (other than (0,0)) and call it the "local origin". I can wrap the graph paper around the sphere along the "global equator" and this gives me a "global coordinate system". I can also wrap the graph paper along the (unique) "local equator" that crosses both the global origin and local origin, yielding a "local coordinate system". Both have the same amount of distortion, but in different places.
The graph paper is in arbitrary units representing a fixed number of radians in the global coordinate system.
I've got a specific point which is expressed in the local coordinate system. Now, what I want to do is get the location of that point expressed in the global coordinate system. I tried a change of basis in the grid (yay!), but it turns out this doesn't work properly (aww) because the grid is warped differently in each coordinate system, so the grid units aren't equivalent in size anywhere except on the local equator (where there's no distortion).
I've thought of transforming the point from the local coordinate system into a (local) 3D (x,y,z) point, then applying a transformation that would rotate it into its place in global 3D space, then working backward from that point to get the global angle coordinates. But that's kind of ugly (plus, I'm trying to keep the number of operations down since I'm using fixed-precision arithmetic).
Surely there's a simple way to go from local (angle) coordinates to global (angle) coordinates?
Update: Nope, I really don't believe there's a simpler way than converting to local 3D Cartesian coordinates, applying a transform to get global 3D coordinates, then going back to global angle coordinates. I could, of course, be wrong.