I think I've figured out where the problem is, though I don't entirely understand the code. The function barter_attempt_transaction() is where the game determines if you can make a trade or not. The first check is if the player can carry the stuff you're bartering for. If you're trading with a party member, it checks their carry weight, otherwise it compares by cost. It doesn't seem to take into account the weight of the items that you're giving to the other person.
Anyway, there's a call to item_queued(), which probably checks if an item is in the event queue - i.e., lit flares, armed explosives, active stealth boys and geiger counters. If it is, the trade is refused. There appears to be a special case for item 52 (inactive geiger counter), where it calls item_m_turn_off(). It should use 207 (the active geiger counter) instead, and for some reason it never triggers. When I force it to trigger for an active counter, it is turned off and sold without a problem.
My guess is that turning geiger counters off doesn't remove them from the event queue for some reason, even though item_m_turn_off() makes a call to queue_remove_this(). Unused geiger counters have never been added to the event queue, which is why they can be sold. Motion sensors don't actually turn on, so they're not affected by the bug. Hopefully that's enough for Timeslip or someone to fix it.
<s>While I haven't tested this yet, if I'm reading item_m_turn_off() correctly, turning off a stealth boy will transform it into a motion sensor.</s>