Subdivision Surface on curved mesh
I think your problem is how you place edge loops in your mesh over the curved surface.

Since it is a cylindrical surface edge loops cant be placed by simple subdivision, because that will yield a flat planar surface breaking the curvature of your otherwise cylindrical body.

When placing edge loops you need to make sure they are equidistant from the mesh center or use Subdivide Smooth for a curvature approximation.