Vou te ajudar de forma diferente.
Considere 4 datas, que nomearemos A, B, C e D.
As datas A e B são as referentes a um registro.
As datas C e D são referentes à sua consulta.
A <= B
C <= D
Sendo assim, as combinações possíveis de ordem destas 4 datas são:
A <= B <= C <= D (1)
A <= C <= B <= D (2)
A <= C <= D <= B (3)
C <= D <= A <= B (4)
C <= A <= D <= B (5)
C <= A <= B <= D (6)
Destas combinações, descarte b[/b] e b[/b], pos ambas desacoplam totalmente os 2 intervalos de datas, e não te interessam.
Assim, para pegar todo o restante, basta observar que nas situações b[/b] e b[/b] A <= C <= B, e que nas situações b[/b] e b[/b] C <= A <= D.
Portanto, na sua query, coloque a data C entre (between) as datas A e B, ou a data A entre as datas C e D.
Obs: estou considerando que between considera os 2 extremos, ou seja, se uso “X between Y and Z”, deve retornar todos os registros em que Y <= X <= Z, e não Y < X <= Z ou Y <= X < Z. Teste aí e qualquer coisa inclua como critério para pegar os registros em que A = C, A = D, B = C e/ou B = D.