the Z80 only uses the lower 8 address bits for IN/OUT requests, so the upper 8 address bits may hold any value - I don't think this is specified. So don't use them for decoding IO accesses.
thats not true, Z80 uses all 16 address lines for IN/OUT operations.
For non-prefixed IN/OUT operations, the high byte address is taken from register A.
So, this code:
LD A,#AA
OUT (#55),A
is equals to OUT (#AA55),#55
For #ED prefixed IN/OUT operations, 16-bit address is taken from register BC.
I haven't used a Z80 in ages, hence the "IIRC"... and I didn't remember that. That's old memories, but I don't think I have ever used anything but the lower 8 bits for IN/OUT operations.
That said, the upper 8 address bits with the OUT (n),A instruction kinda looks like a trick, since it will output the same byte on the data bus than on the upper 8 address bits. Could be put to use I guess, but that's kind of funky nonetheless.
I downloaded the Z80 user manual to refresh memory (my own). What's somewhat confusing (and maybe why I, and probably others, have never thought of using the upper 8 address bits) is that, whereas it's indeed stated in the instruction set description, the /IORQ pin function description says ('Overview' section):
Input/Output Request (output, active Low, tristate). IORQ indicates that
the lower half of the address bus holds a valid I/O address for an I/O read or
write operation.
So I'm wondering whether this upper half trick wasn't added as an afterthought or something, and the manual not completely updated. Looks like I just learned a Z80 trick more than 20 years since I last used one.

And in the OP's case, since he wasn't taking care of the upper half anyway, there was no reason to use anything but the lower half.
Brings back fond memories!