Hey. I know it's been a year but are you still having this issue?
I'm using Godot v 3.1.1 stable and I get the exact same issue if I pass in any value to the alpha channel in my visual shader, even the value of 1 (solid no alpha).
What it seems like is that Godot sorts alpha transparency objects by the distance from their origin to the camera. This is a speed trade off I believe, because the other option is to draw them multiple times.
This is fine for some particle effects, but doesn't work for grass, hair, etc.
Anyways... I think I'm just going to build my project without alpha transparency for now. Different design decisions.
Also, for certain things this kind of Z sorting is ok. I was able to do eye-lashes for my character for example, but couldn't do hair well with the Z sorting. Smaller objects that do not intersect each-other work fine. So for example you could do many more smaller grass chunks that don't intersect each other or other physical objects. As far s looking good from different angles you could still have them face different directions but not intersect (so there's no Z sorting problems).
So for example, this cross shape you have below:
--|--
It could be three separate objects and would likely Z sort correctly if my guess on how it's Z sorting is correct.
For me... I'm trying to figure out how to render longer hair well.