At the link point (i.e. at the end of the route), the angle of the curve really is 90 (vertical). The problem that you see is that the curve is so sharply turned to the side that the farther away it is from the end point the farther away it is from the mid-line of the arrowhead.
You might be interested in this forum topic: Arrowhead bug?
Of course you’ll need to adapt the code for your vertically oriented links, rather than the horizontal ones that topic was discussing.
The behavior in your #2 seems very odd. Is there any way I can reproduce that behavior?