I have designed a cryptographical protocol which uses AES-GCM with a single key.
I have gone to great lengths to ensure the same initialization vector is never reused. The first bits of the initialization vector are transported over the wire and chosen by the sender according to a very sophisticated mechanism which combines a random bit prefix (renewed with more randomness when the counter runs out, persistently stored, collisions prevented), a counter suffix (persistently stored in a safe manner in which even a power outage can't result in IV reuse), and the entire thing is XORed by a random fixed value (persistently stored).
The last IV bit tells the direction: 0 (uplink) and 1 (downlink). This is fixed, so an uplink message can't have 1 and a downlink message can't have 0, they are always validated and invalid messages are rejected. (Obviously the counter field ends in the second last bit, as the last bit is reserved for direction.)
While planning how to add ephemeral keys with key negotiation for perfect forward secrecy, it was advised in Can Curve25519 shared secret be safely truncated to half its size? that a single key shouldn't be used for both uplink and downlink.
However, if the last IV bit fixes the direction, a reflection attack shouldn't work, right? An uplink message can never be a valid downlink message and a downlink message can never be a valid uplink message, alone based on the differing last IV bit. Reusing the same key for two client or server devices obviously is discouraged and with key exchange and ephemeral keys, would be almost impossible even with invalid configuration.
Is key reuse safe in this manner, if IV bit tells the direction of the message, and this is enforced by not allowing invalid packets (in which case we don't even try to decrypt a packet with invalid IV)? Are there other reasons to avoid sharing key for uplink and downlink than IV reuse (which I prevented) and reflection attack (which I think I also have prevented by using the last IV bits as direction indicator).