Hi @Viorel and anyone else who's interested,
this LinearGradientBrush thing has been bothering me for a while so I thought I'd write a quick app to check it out 'once and for all'.
The screenshot above shows the 'normal' display of the LinearGradientBrush but I've added a dotted line to show the start and end points. The solid line is drawn through the midpoint of the start/end line plus I've added another gradient stop (in white) in the middle to show where the colour boundaries are. As you can see, you are absolutely right, the border is perpendicular to line that connects StartPoint and EndPoint. I would mark you comment as the answer but the Q&A interface doesn't seem to allow that.
Anyway, I thought what do I need to do to get the LinearGradientBrush to behave as I orginally (and mistakenly) thought it would behave. Hence the next screenshot:
As you can see from the screenshot, I've drawn a solid line from the top left to bottom right, then calculated its midpoint, then drawn a dotted line perpendicular to it passing through the its midpoint. The co-ordinates of this line were the converted to the StartPoint and EndPoint values of the LinearGradientBrush. This seems to work as I originally thought it was supposed to but required quite a lot of extra code, particularly to account for size changes. It would be so much easier is the was an option to interpret the StartPoint/EndPoint differently via a property setting on the LinearGradientBrush itself but I imagine that that's not going to happen anytime soon.