Note that N4SID always estimates initial states when using time domain data; the InitialState option does not really help here. I agree however, that returned output should be consistent with the demanded behavior.
If you must fix initial states to zero, I recommend running 0 or 1 iterations of SSEST on the returned model.
m0 = n4sid(data, 5, opt);
opt2 = ssestOptions('InitialState','zero');
opt2.SearchOption.MaxIter = 0;
m = ssest(data, m0, opt2);