Why is the output frequency of the zero crossing detector (square wave generator) double that of the input signal?
You are violating the common mode voltage range of the input of the LM358 when \$V_{in}&lt;0\$: in this case, \$V_{A_{D_2}}\simeq 0.6\mathrm{V}\$ thus 
$$
V_{CM}=\frac{V_{i+}+V_{i-}}{2}=\frac{-V_{A_{D_2}}+0}{2}\simeq -0.3\mathrm{V}&lt;0\mathrm{V}
$$
This implies, especially in such old design operational amplifiers, that the inputs latches up so, possibly, the non inverting input behaves as an inverting one making the OPAMP output going high.
Said that, the following circuit is an improved version of yours, which should work for your purposes:







simulate this circuit &ndash; Schematic created using CircuitLab

For this circuit, the common mode voltage \$V_{CM}\$ is \$\frac{V_+}{2}\$ thus you should not incur the problem you noticed: also, if you need to have a defined output, whatever high or low, when there is no \$V_{in}\$ ,you can add a resistor in parallel to one of the inputs of the OPAMP in order to unbalance the circuit in order to have the desired output.