Ok, from the docs:
"A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A."
I think I'd misunderstood and read those two clauses as being somewhat synonymous but depending on who calls to move_and_slide(), etc.
Well, based on what I've seen above and the documentation snippet above, I can see that it's implied that it's Object A making the call to move_and_slide(), and this is consistent with the above.
Sorry for all the trouble, but hopefully if someone else fails to read the docs properly (like me), they'll realize the mistake.
Does it make any sense to amend the docs to make it clearer to idiots like me that what happens with "contact detection" is explicitly the result of a single call to move_and_slide()?