Hi @DanielMcIlroy ,
A bit of a late response but thought I'd try anyway...
The angle of your latitudes is changing as you go east-west, so the only way I could see to sort it out dynamically is:
1. Get a feature class of the grid.
2. Split the lines at grid intersections
3. For each line calculate or manually add the bearing you want the labels to be in a 'rotation' field
4. Set the field as rotation value of your labels.
For longitude lines the angle stays the same throughout for each line, so you don't need to split them, just add the rotation value you want in the table for each longitude.
Hope this helps,
Uri
If this answer solved your question or if you found it helpful please mark it accordingly to help others who have the same question.