Los <and>
y <or>
funcionan de la siguiente manera: Todos los elementos dentro de ellos se juntan mediante la expresión definida en el contenedor. Esto es, si tu tienes una etiqueta and de la siguiente manera:
<and>
<filter1/>
<or>
<filter2/>
<filter3/>
</or>
</and>
Esto te va a producir lo siguiente
filter1 and (filter2 or filter3)
Tu en el join lo primero que tienes puesto es un and, así que te junta los elementos con and.
Luego tienes dentro un montón de despropósitos, como
<or>
<or>
<filter1/>
<or>
<filter2/>
</or>
</or>
</or>
que podrías resolver simplemente con
<or>
<filter1/>
<filter2/>
</or>
Vamos, que revisando lo que tienes yo diría que lo tienes todo al revés