There is a bitscope plugin you can insert to see what bit depth is being utilized in real-time, called bitter, free download from, http://www.stillwellaudio.com/plugins/bitter/
if you start out with a 24bit audio file, and have no active plugins, then during playback, bitter will show you the bit depth is 24 bits everywhere in the mixer (see attached screenshot, No_active_plugin.png). Or with no plugins active then the mixer signal path should be a straight pass thru where the output = input.
But once you activate a plugin in the mixer, then bitter will show you the bit depth after the active plugin has changed - in this case starting from a 24 bit depth - to what looks like 32 bit. This example shows just taking Logic Pro's EQ out of bypass mode - w/o applying any EQ (see attached screenshot Active_plugin.png).
You can always make your last plugin one that sets the bit depth to whatever you like, e.g., 16, 24 bit, and also apply some dither there if the plugin supports it. I would hope that if Logic detects that the output is already 24 or 16 bit fixed, then it is not going to subsequently do anything to the audio (like apply dither again), while playing back/monitoring in real-time.
I sometimes thought real-time playback of audio in Logic did not sound the same as the results from offline bounce. I was correct, but not for the reasons I expected. After capturing the audio output from real-time playback, and comparing it with the audio files created by the bounce, I found glitches in the audio recorded from real-time playback aligned with wherever there was a high density of automation events in the mix. The glitches/garbage was at a low level, but measurable. I filed it as a bug, and I believe Apple notified me it had been fixed.