After quite a bit of testing between piCore and Arch Linux (both fresh installs) it has to be something on piCore's end
Arch has no problems with 16 or 24 bit. piCore has the noise when playing 24bit.
I was starting to suspect madlib (mpd's mp3 decoder) so I tried with a 44.1k 24bit FLAC and got the same results. I also swapped between direct USB port and powered hub (btw, my DAC is externally powered)
It MUST be something to do with piCore and how it deals with mpd. Or, piCore is doing something that mpd really doesn't like.
aplay worked correctly with a 96k 24bit wave file but anything via mpd and it has a problem.
Thanks for all your help guys. mpd has no problem at all on piCore with 16bit music but I had hoped to build an "Audiophile" system with my new DAC and play around a bit. For now, it looks like I'll have to reluctantly stick with Arch. btw here's a verbose portion of the mpd log from each respective distro playing exactly the same FLAC file.
piCore mpd log
Mar 05 21:15 : decoder_thread: probing plugin flac
Mar 05 21:15 : decoder: audio_format=44100:24:2, seekable=true
...
Mar 05 21:15 : alsa_output: opened hw:0,0 type=HW
Mar 05 21:15 : alsa_output: format=S24_3LE (Signed 24 bit Little Endian in 3bytes)
Mar 05 21:15 : alsa_output: buffer: size=90..174762 time=2040..3962858
Mar 05 21:15 : alsa_output: period: size=45..87381 time=1020..1981429
Mar 05 21:15 : alsa_output: default period_time = buffer_time/4 = 500000/4 = 125000
Mar 05 21:15 : alsa_output: buffer_size=22050 period_size=5513
Mar 05 21:15 : output: opened plugin=alsa name="My ALSA Device" audio_format=44100:24:2
Arch linux
Mar 05 14:24 : decoder_thread: probing plugin flac
Mar 05 14:24 : decoder: audio_format=44100:24:2, seekable=true
Mar 05 14:24 : alsa_output: opened hw:1,0 type=HW
Mar 05 14:24 : alsa_output: format=S24_3LE (Signed 24 bit Little Endian in 3bytes)
Mar 05 14:24 : alsa_output: buffer: size=90..174762 time=2040..3962858
Mar 05 14:24 : alsa_output: period: size=45..87381 time=1020..1981429
Mar 05 14:24 : alsa_output: default period_time = buffer_time/4 = 500000/4 = 125000
Mar 05 14:24 : alsa_output: buffer_size=22050 period_size=5513
Mar 05 14:24 : output: opened plugin=alsa name="My ALSA Device" audio_format=44100:24:2
as you can see, buffer sizes etc. are identical. I'm really stumped. Hopefully we'll see a fix for this in the future. I'm suspecting the problem will affect any 24bit DAC.