Subquery with relationships property

You're kind of close, you just need to ensure you generate a cross product for all pairs of characters appearing in season 3 (which we can do be collecting every person with a season 3 appearance then UNWINDing that list twice to get the cross product, then do the id filter to deduplicate), then you can use shortestPath(), ensuring that all relationships in the pattern must be from season 3.

explain
MATCH (p:Person)-[r:INTERACTS]-() 
WHERE r.book = 3
WITH collect(DISTINCT p) as book3Ppl
UNWIND book3Ppl as personA
UNWIND book3Ppl as personB
WITH personA, personB
WHERE id(personA) < id(personB)
MATCH path = shortestPath((personA)-[:INTERACTS*]-(personB)) 
WHERE all(rel in relationships(path) WHERE rel.book = 3)
RETURN length(path) as len, [x in nodes(path) | x.name] as path
ORDER BY len DESC
LIMIT 5