So, this was a case of programmer error ...
I was setting my self.contents as a weak reference, so by all rights it should have been deallocated immediately and always returning a count of 0. Since the debug configuration has an optimization level of None [-O0], it wasn't deallocating immediately, allowing me to use it.
The release configuration is set to Fastest, Smallest [-Os], causing the weakly-referenced array to deallocate immediately, not allowing my UICollectionView to pick up its values.
Thanks to Artur Ozierański for his help.