El por que ocurre eso es simple.
output_float() actua sobre el registro TRIS
mienrtas que output_low y output_high solo actuan sobre los PORTx/LATx, pero no modifican los TRIS si es que se usa el FAST_IO
Si qusieras volverlo a salida deberias modificar los tris de ese pin, para hacerlo pin a pin, podes usar
output_drive(PIN_xx)PD: Yo me aseguraria dejando el output_low y luego de ese ponerle el output_drive
while (1){
output_low(DQ);
output_drive(DQ);
delay_ms(500);
output_float(DQ);
delay_ms(500);
}