Thanks for the quick reply!
You remember correctly: rec is documented as an anti-pattern, with some pitfalls including those gnarly infinite recursion errors.
Below are the prepended let binding and other function changes I made, based on the pname + version pattern seen here.
let
pname = "scientifica";
version = "v2.1";
in
stdenv.mkDerivation {
# removing 'stdenv.' results in "undefined variable 'mkDerivation'" error
name = "${pname}-${version}";
The new overlays/scientifica/default.nix function successfully builds with nixos-rebuild test and nixos-rebuild switch. However, all Nix utilities mentioned throw the same errors mentioned in the OP.