Helm 3 performs a three-way strategic merge on upgrade, comparing the old rendered manifest, the new rendered manifest, and the live object. A field that Helm previously set and that someone later changed with kubectl edit is reverted to the chart's value, which is the intended behavior and the reason Helm 3 fixed the Helm 2 drift problem.
The asymmetry catches people out. A field Helm has never set is left alone, so a replicas count adjusted by the Horizontal Pod Autoscaler survives upgrades if and only if the chart omits replicas from the Deployment. A chart that hardcodes replicas: 1 resets the autoscaled count on every upgrade and then lets the HPA scale it back up, producing a brief capacity dip.
The fix is to omit replicas from any Deployment managed by an HPA, which most well-written charts do behind a conditional. Inspect what Helm believes it set with helm get manifest RELEASE, and compare against the live object to predict what an upgrade will change.