LM358P output saturation around 6.05V (root cause turned out to be related to Arduino protection diodes)
I believe your circuit has gone unstable and is oscillating. You have a 1.5 kohm resistor feeding the gate and the gate capacitance will be "fractionally" seen relative to ground at this point and this will add a fair amount of phase shift. You close the loop and you get an oscillator.

Normally you can rely on the FET acting as a 1:1 voltage converter from gate to source but, with such a low value resistor in the source, this might degrade to more like 1:0.7 and this will mean 0.3 X gate-source capacitance is seen to ground at the gate. If it were a perfect 1:1 gate-source voltage converter then there would be no capacitance seen at the gate theoretically.

The specified gate capacitance is 1.9 nF for the IRFZ44 and so the 1.5 kohm resistor will see about 30% of this i.e. ~600 pF. This forms a 3dB low pass filter at about 178 kHz - at this frequency the signal is shifted by 45 degrees and thus reduces the phase margin of the LM358 causing it to sing its little heart out! It's probably oscillating somewhere between 200 kHz and 1 MHz. A more modern op-amp would have a graph of its open-loop phase response and this frequency would be easier to predict.

Try reducing the 1k5 to about 100 ohms or less and see if the situation improves. In fact I would just short out the 1k5 entirely. You could add an integrating capacitor and input resistor as pointed out in another answer but this will significantly reduce the dynamic capability of the circuit to maintain a constant current. It's a lot easier to drop the 1k5 in value.