I think sox must avoid clipping whenever possible. If this workaround is the easiest solution then, when sox determines the user wants 32 bit float as output or stats, it must start using libsndfile implicitely without specifying -t sndfile.
SoX handles 32bit float files with volume over 0 dBFS incorrectly