I can't tell for certain, but I suspect the problem is that the response is coming back from the server with a CRLF line terminator (i.e the carriage return character followed by linefeed). When the shell does command substitution on wget ..., it trims the ending linefeed, but not the carriage return; as a result, "$status" isn't "true", it's "true\r" (with \r indicating the CR). You can use the tr command to strip CRs and avoid confusion:
(EDIT: Apparently there are also stray newlines as well; I added that to tr's kill list, and just in case added some ... clarification ... to the echo command to show any invisibles that sneak through.)
#!/bin/bash
status="false";
while [ "$status" != true ]
do
status=$(wget -q -O - http://server | tr -d "\r\n")
echo "'$status'" | cat -v
echo "Sleeping for 5 sec"
sleep 5
done
(I also removed a couple of redundant semicolons and replaced the backquoted command substitution with $( ... ) -- it does the same thing, but is much easier to read and avoids some odd syntax glitches with nesting and escapes).