The "Hide non-text channels" feature assumes that channels can only have one prefix character. In %#test, the first character is assumed to be the prefix. The second character is # and is non-text, so the channel is hidden.

The reason you are able to join %#test is that the "List Channels" routine that joins channels removes characters from the start of the channel name until it finds a valid channel prefix. I'll see if I can add this to the "Hide non-text channels" feature as well.