Im trying to put a hole in a curved surface while maintaining curvature and clean topology. Deleting a vertex and selecting the loop and using loop tools > circle always flattens out the surrounding area and i can never get the curvature right when sliding edges and vertices around arbitrarily.
Create another cylinder that has the same radius (or duplicate the current one and rotate it 90° on Z). Select your cylinder with the hole, select all the vertices around the hole, assign them to a vertex group (CtrlG):
Give a Shrinkwrap modifier to the cylinder with the hole, choose the other one as Target, select the vertex group, apply the modifier:
You may need to give a Subdivide Surface modifier to the other cylinder if necessary.