logically correct: it checks if the Organization in the join record exists in the Current User’s Profile’s list of Organizations., This should work for controlling access to the join records themselves. That is, users will only see the Profile x Organization records where there is a shared organization with their profile.
This rule only controls the join table data.
If your goal is to control access to the actual Profile fields, you can’t set a list-intersection rule directly on Profile. Instead, you need to:
Keep the join table as you have.
In searches for Profiles, do something like:
Search for Profiles:filtered
This Profile is in Search for Profile x Organizations:filtered
Organization intersects with Current User's Profile's Organizations