Yes, it's a writing and scripting collision/oversight isn't it?
If we follow the path where Tav actively romances Halsin and Shadowheart together it starts with Halsin declaring his interest and asking Tav to speak to Shadowheart first. Shadowheart alludes to being understanding of Tav's desires and "wants all the details" afterwards. This properly foreshadows what Shadowheart says in the brothel scene because Tav has now given Shadowheart a spicy and juicy recollection of their time spent with Halsin. Tav and Shadowheart proceed to take their relationship the next step and then the flirty banter happens in the context of Tav, Halsin and Shadowheart having a fully consensual agreement about their poly relationship. It all checks out.
But when bad writing/scripting causes this path to get mixed up with the path where Tav has shown no interest in including Halsin (or worse, actively rejected him) it instead just becomes creepy, cringey and toxic.
Pretty much this. These dialogues should only trigger if you agreed to it. Even if the whole idea of Shadowheart suddenly being fine with poly doesn't make any sense based on how she was written for the entirety of act 1 and act 2, at least it'd be more consistent with your act 3 choices then. EDIT: Same goes for Astarion to be fair. In both cases it feels pointlessly forced; why would the characters written as the most vulnerable and dependent be the ones that are okay with it? Halsin's entire inclusion as romance character just feels like a writing mistake.
I'll never know if they'll change it though because Halsin will never enter my party anyway. I'd rather have a hireling if it comes to it.