I'm not sure if this is actually a bug in fish, but (test -d) with no argument returns true, and nonexistent environment variables return an empty string, so (test -d $XDG_DATA_HOME) returns true when $XDG_DATA_HOME isn't set.
Prior to making this change, I would get an error from dirname when opening a shell and an error from fish when cd'ing.