How to create a snow layer that only attaches on faces that look up?

The material function World_Aligned_Blend can do this for you. The up vector is the default vector, you just need to change bias and sharpness usually.