UPDATE:
Well, I have no idea what’s wrong. I tried pre-comping layers, removing what I thought would be the offending layers, rearranging layer orders, rendering out the curtain layer and then reimporting it as a .mov.
Nothing worked. Like I said, it would RAM preview fine, but would always render out bad. I ended up doing a full res RAM preview of the scene and then just saving the preview.
“The secret to creativity is knowing how to hide your sources.” –Albert Einstein