I've read the doc string again -- I didn't think the current behaviour
was documented, but it is:
---
If DEFAULT-FILENAME is omitted or
nil, then if INITIAL is non-nil, the default is DIR combined with
INITIAL; otherwise, if the current buffer is visiting a file,
that file serves as the default; otherwise, the default is simply
the string inserted into the minibuffer.
---
So it's documented that buffer-file-name is the default value, no matter
what default-directory is.
I guess the fix here has to be in ido itself, and it'll have to
special-case write-file.
[time passes]
OK, now done in Emacs 28, and the test case now works better, and there
probably shouldn't be a lot of regressions here...