If any of the shard keys don't exist, the error message is fairly opaque. Could it mention the document _id.
> db.runCommand( { shardcollection : "" + coll, key :
{ bucketId : 1, entityId : 1, variationId : 1 }} )
{ "ok" : 0, "errmsg" : "exception: invalid parameter: expected an object ()" }