What are the tradeoffs between control vs software algorithms (in charge pump PLL)?
I would like to calculate f as often as possible accurate to 0.5Hz
  accuracy and my zero crossing is accurate to within 100us.


If you were measuring a 65Hz waveform over 1 cycle and you had a zero cross error of 100us the total period measured would be: -

\$\dfrac{1}{65} + 100E-6\$ = 0.015484615 seconds or, a frequency of 64.58 Hz.

This seems accurate enough given your requirements. You should also consider how many pulses you would count over that period and I'd aim for counting 10us pulses or better. This is one-tenth of the error incurred by the zero cross detector and filter.

I don't think you need to go to the complexity of any PLL for this.