Shader: Pass not using alpha:fade

Answered.

Surface shaders work completely differently to vertex/fragment shaders. Your first pass is a surface shader; as such you can enable transparency in the declaration (as you have with ‘alpha:fade’). However, in a regular pass you need to use a blend function (like the one at the start of the subshader, which really won’t do anything as it is). The blend function goes just inside the pass brackets before the CG section;

...
Pass
{
    Blend SrcAlpha OneMinusSrcAlpha
    ZWrite Off

    CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag
...