Detecting fundamental zero crossing point
I am not confident I have the best algorithm, but short of other suggestions I could offer you this idea:

Use an NCO (Numerically Controlled Oscillator) clocked to a known and accurate time reference to create a 50 Hz or 60 Hz reference signal, and lock the NCO to the power line signal using a Phase-Locked-Loop (PLL). The NCO will lock to the power line signal in quadrature phase with optimum noise suppression (based on the loop design and desired time averaging versus dynamic requirements). By reading the phase accumulator word the instantaneous phase offset between the power line signal and the time reference can be determined.

This idea is developed as follows:

If you have a known time reference and can generate a reference 50 Hz or 60 Hz sinusoidal signal, then you can use a phase detector (by multiplying the two signals and low pass filtering) to determine the phase difference between the two, and from the determined phase can determine the zero crossing relative to the known time reference. There will be calibration involved to offset the time delay of the low pass filtering. The advantage of this approach over single sample decision metrics (threshold zero crossing detectors) is its relatively high noise immunity based on the frequency cut-off (averaging time) of the low pass filter used.   The phase detector is based on the mathematical relationship between the product of two sinusoids at the same frequency; the result is an output magnitude that is proportional to the cosine of the phase of the two signals. This provides an unambiguous mapping of phase to magnitude over a 0° to 180° range.  Most significant is the result is averaged (via the low pass filter) over all samples taken, so benefits from significant noise averaging- EVERY sample in the waveform is used and contributes to the estimate of the waveform's phase position!

This is not yet complete as the primary drawback with this approach is that if the two signals approach 0° and 180° phase, the slope of the phase detector output approaches 0; meaning the result is not very sensitive (accurate) to phase shifts. The ideal operating point is when the two signals are in quadrature as the output would have the highest slope (sensitivity) to phase changes. 
This leads to the improved approach of using a reference signal where you can precisely control the phase, and adjust the phase to the quadrature relationship between the signals by monitoring when the output of the phase detector is zero- this is basically how many phase locked loops are designed to operate, and you could use such a phase locked loop (PLL) approach to do this adjustment automatically; as long as you have accurate knowledge of the relationship between the control to your reference waveform and its phase. Further this gives you well designed control of your averaging time via the loop bandwidth of the PLL design. A numerically controlled oscillator is such a device where you have precise knowledge of its phase at any given time, based on its phase accumulator.    

For more details on the NCO implementation, see this link: Numerically Controlled Oscillator (NCO) for phasor implementation?