We can still use find to find all directories, but the loop that takes those directories will have to test for MP3 files:
#!/bin/sh
indir=$1
outdir=$2
mkdir -p "$outdir" || exit 1
find "$indir" -type d -exec bash -O nullglob -c '
outdir=$1; shift
for dirpath do
mp3files=( "$dirpath"/*.mp3 )
[[ ${#mp3files[@]} -eq 0 ]] && continue
printf -v outfile "%s - Track only.mp3" "${dirpath##*/}"
sox --show-progress "${mp3files[@]}" "$outdir/$outfile"
done' bash "$outdir" {} +
This /bin/sh script runs find and find runs a short in-line bash script. The bash script will be called with batches of pathnames to directories, but the first argument will be the pathname of the output directory. This is received in outdir in the bash script, and that argument is shifted off the list of positional parameters, leaving only a list of directory pathnames.
The in-line script then iterates over these directories, and expands tho glob *.mp3 in each, yielding a list of pathnames for MP3 files that we store in the mp3files array.
Since we use -O nullglob for this script, the array will be empty if there are no matching filenames, so the -eq 0 test is used to skip to the next iteration if this is the case.
We then construct the output filename from the current directory pathname, and run the sox command on the collected MP3 filenames.