I think this is a color management bug with -solarize.
convert -size 50x100 gradient:"gray(255)-gray(0)" -depth 8 grad0.png
Image: grad0.png
Geometry: 50x100+0+0
Page geometry: 50x100+0+0
Class: PseudoClass
Colorspace: Gray
Type: Grayscale
Depth: 8-bit
Alpha: False
Channels: gray

convert grad0.png -solarize 50% -level 0,50% grad2.png
Image: grad2.png
Geometry: 50x100+0+0
Page geometry: 50x100+0+0
Class: PseudoClass
Colorspace: RGB
Type: Palette
Depth: 8-bit
Alpha: False
Channels: rgb
Result is converted from grayscale to rgb.

I can work around it by:
convert grad0.png -set colorspace RGB -colorspace gray -solarize 50% -level 0,50% grad2.png
But I would think that this should not have to be done.