I figured out the issue, sort of...
WLS polls the /autodeploy directory quite often. It tries to deploy the application before it's finished being copied. There's supposed to be a WLS setting to change this polling interval, but I was unable to find it.
At the same time, I read that WLS looks for a file in /proj.ear/META-INF called
REDEPLOY. Now, I am exploding my project with this file, but not before touching the file to give it a new timestamp.
When I do this, the application deploys in exploded form without issue.