Intersects returns a FeatureSet, but you need to get the attribute from a single feature to use in your Decode statement.
var z1 = 'Jimbob'
var z2 = 'Scuba Steve'
var z3 = 'Stranger'
var z4 = 'Pedestrian'
var sel = Intersects(FeatureSetByName($map, "Zones"), $feature)
//return (sel)
//return(FeatureSetByName($map, "Zones"))
return Decode(First(sel).P_ZONE, "BZ1", z1, "BZ2", z2, "BZ3", z3, "BZ4", z4, "Scooby")