SAN値はスコアボードでやればいいんじゃないでしょうか。
セーフゾーンはtagで管理すればいいんじゃないでしょうか?(safe1みたいな感じで)
execute as @a[セレクター] run scoreboard players remove @s SAN 2
execute as @a[セレクター,hasitem={条件式}] run scoreboard add SAN 1
tag @a[scores={SAN=..0}] add spawn
tp @a[tag=safe1,tag=spawn] 座標
tp ….セーフゾーン事に
tag @a remove spawn