I was able to achieve this by creating a custom orientation as suggested by @PGmath. If there is a more direct approach please post an answer as it seems like there should be.
Anyway here's how to do it:
Go to edit mode and select an edge that is in the direction you want to move the face. In my case this was the edge in the diagram below the label 'B'.
Change the Orientation to 'Normal' and notice the X/Y/Z guides now conform to that edge.
Open the Properties window (press N) and scroll down to find "Transform Orientations".
Click the + button to create a new orientation based on the current selected edge/orientation.
Over on the left hand tools panel, scroll to the bottom and in 'Create Orientation' give the custom orientation a name.
Now, select the custom orientation in the Orientations drop-down at the bottom of the 3d view.
Go into face select mode and select face A.
Type G Y Y and move the face along the plane as required. (Pressing Y twice uses the custom orientation, once only uses the global orientation.)
Listen to the little robot man in this youtube video if you need more info on creating a custom orientation.
That works, but far easier would be to just select the face representing the plane to move along (B) and somehow tell Blender to constrain moving faces/edges/vertices along that plane.
I don't have the time or knowledge to write that myself, if anyone does it would be appreciated.