I realised that procedure apoc.neighbors.tohop is broken.
I tried it on the graph given in the following example and when distance parameter is higher that 1 it returns strange result, including starting node.
I tried example from the link above and after executing query
MATCH (p:Person {name: "Praveena"})
CALL apoc.neighbors.tohop(p, "FOLLOWS>", 2)
YIELD node
RETURN node
we get: {name: "Mark"} and {name: "Praveena"}
instead of: {name: "Mark"} and {name: "Joe"}