Yes, orbit controls orbit around their target position.
What you can do is:
(1) disable orbit controls all the time when looking at a painting (simply stop calling this.controls.update(); in the loop and do the rotation yourself, until user decides to leave, clicks or moves the mouse)
(2) set controls.target to the center of the painting based on its bounding box (see here how-to).
Long story short - don’t play with rotation when using OrbitControls.update(), it’ll just mess things up, use target only.
The moment I enable the controls back the lookAt by OrbitControls will be called again with the last value of controls.target. That will make the experience unpleasant as the camera will not be looking at the same place when enable back the controls. Is there a way to get the right values for target.set() and camera.set() to be able to look at the right place?