Hi leeperry,
A few thoughts:
An immediate problem I see is that lines 113/114 (float->PCM32) and lines 129/130 (float->PCM24) of the file you linked use the same multiplier and clipping limits as each other - probably not what you want, and I can see why this might mess up the float->PCM24 conversion if nothing else.
My second comment depends on your point of view with regards to lossless conversion: If you want the ability to perform lossless PCM->float->PCM conversion, then when doing float->PCM you need to multiply by the same amount that you divided by in PCM->float (that is, 2^n). What you - and most people - are doing is multiplying only by (2^n)-1 instead. Of course, this stops the PCM output from overflowing in the case of a 1.0f-valued sample, but will NOT allow the conversion to be lossless.
My point of view is that you're incredibly unlikely to produce any samples which occupy the few floating-point values that cannot be converted (properly) to PCM, especially if you're taking samples from the PCM input anyway, so I always do it in a symmetrical fashion. I believe the guys from PortAudio (for example) disagreed with me on the importance of that point, so I modify their conversion library if I need to use it.
Just to be clear, I would use a multiplier of 2147483648.0 in line 113 and 8388608.0 in line 129, etc.
Hell, your code is closer to this than some - I've seen one converter which uses different multipliers depending on whether the sample is positive- or negative-valued! That's rather hideous from a signals/distortion perspective.
Another quick point is the comments about subtracting 0.5 prior to converting to int. To be honest, I'm not sure why he's SUBTRACTING (I always add, which I'm pretty sure is the right way to do it), but it appears to be a rounding vs. truncation thing: when you convert a float to an integral type it truncates off the last few bits rather than rounding to nearest. This doesn't mean much of anything in terms of distortion, but it does introduce a -0.5LSB DC offset into the signal. If you add the half an LSB prior to the truncation you get proper rounding instead, which is more elegant. It might be better to add it prior to clipping rather than after it.
I'm sorry that I'm not sure what could be wrong with PCM24->PCM32 conversion - I think the code looks broadly right, but I hope this has helped in some small way. It has been a little while since I've had to code anything in this area, so there are likely to be things I've missed.
I don't have much more time to look at the code right now (am at work!), but I'll have another look later - do let me know if I can do anything else. This stuff is fun