I have noticed this on many objects that aren’t spherical but use the Smooth shading in cycles.
Example, if I make a plane, loopcut it many times vertically, then add a curve modifier to bend it to the shape of a curved wall. I then add smooth shading for the smooth curved wall look. When I add the glossy shader, it only reflects from certain angles. When I turn on flat shading, the gloss is fine.
I have attached some reference images where I single out a glossy shader to show the error. Shouldn’t glossy object reflect everything on the whole surface since its all glossy?
My guess is there is some kind of problem interpolating normals of surfaces that start facing away from the viewer. The same problem also occurs with the glass shader. (And depending on refraction, it’s even worse.) It’s possible to help reduce it by loop cutting the model and sliding the edges towards the ends where artifacts show up. This means there are smaller normals to be interpolated in those areas and it reduces what’s visible of the artifact.
Interestingly enough, marking edges as sharp and splitting edges on the sharp creases of cylinders appears to stop artifacts as well. It could be there is some problem when interpolated normals start facing away from the camera on more than one axis.
I’m not a programmer, but I’d take a wild guess that the shaders are interpreting the interpolated faces generated by smooth shading as back-facing when they’re not. So the artifacts are same as those when normals aren’t facing the correct way in regard to the camera being able to calculate rays or whatever.
I’d also say it’s definitely a bug. I wonder if it’s listed in the tracker?
You can solve the issue just by adding an edge-split modifier, in this case, Cycles is trying to interpolate across an angle approaching 90 degrees. Either add an edge-split modifier or apply a rounded bevel to the sharp edges using the bevel modifier.