Solved. I guess I was expecting too much from the api. After much experimentation I realized that the presence of service layers in the mxd was forcing rasterization. I added the data to the staged mxd and set the gp service to remove service layers. It would've been useful to have this information before I spent several hours puzzling over this.