short to ground in custom Arduino shield only when connected - how do I find it?
I found the problem. It was a pin mismatch. The Eagle schematic was correct, but I had the shield XIO connector reversed in the Eagle board layout - so I had two pins connected to what I thought was ground, but on the Arduino Due, they were connected to +5V.

It's a 4-layer board. I found the problem by looking at the different layers in gerbv - when looking at the ground (GND) layer, I noticed there were two ground connections that shouldn't be there... that led me to discover the connector was placed backwards in the Eagle board file.

Here's a picture of part of the ground layer of the board that has the problem. The two pins in the upper right are +5V on the Arduino, but connected to ground on my board.