A parent chart overrides a dependency's values by nesting them under the dependency's name, or under its alias if one is set in Chart.yaml. Writing image: tag: v2 at the top level of the parent's values.yaml sets the parent's own value and has no effect on the subchart, which silently keeps its default.
The one exception is the reserved global key. Anything under global in the parent values is merged into .Values.global for the parent and every subchart at any depth, which is the intended mechanism for shared settings such as an image registry or a storage class.
Values flow downward only. A subchart cannot read the parent's non-global values, and two sibling subcharts cannot see each other's. Verify what a subchart actually received with helm template --debug, or render just that subchart's output and compare. Note also that helm dependency update writes Chart.lock and downloads into charts/; committing Chart.lock pins the resolved versions, while leaving only a version range in Chart.yaml lets a later build resolve a different dependency.