Bash from super in overlay is built from source

Consider the following expression:

let
  overlay = self: super: {
    hello = super.hello.overrideAttrs (_: { postInstall = "${super.bash}/bin/bash --version"; });
  };
  pkgs = import <nixpkgs> { overlays = [ overlay ]; };
in pkgs.hello

When I build this, super.bash is built from source. If I use self.bash instead (in postInstall), I get a different output for Bash (which is cached). The Bash versions are the same. Since I’m not explicitly changing any build inputs for Bash, what makes these differ?

This does not appear to be the case generally. For instance, it does not happen with zsh.

I realize that there’s no good reason to use super.bash here, just trying to get a better grasp on overlays.