どうやら screen の exec 終了時に SIGHUP が送られているようです。
xsel は background process になるので、すぐに exec が終わり
SIGHUP 発行となっているようす。

なので nohup を使って以下のようにすることで、問題は解消しました。

screen -X exec sh -c "nohup xsel -i < ~/.screen_exchange &>/dev/null"

# nohup 使いにくい。nohup.out 作ったり、その旨のメッセージを出したりしなくていいのに。