1. When y1=y2 the gradient vector length is 0 (because for your gradients x1=x2). The SVG specifiation says this:
So what's your last gradient stop? It's this:
<stop offset="1%" stop-opacity="0" stop-color="red" />
0 opacity means no drawing of anything so no Firefox bug there.
2. As for the rotation origin. The rotation box is the view-box and not the fill-box per the specification
Chrome gets this wrong and uses the fill-box but Firefox does not. Given a different box size the placement of the centre of that box can be different.