As it turned out, the two entry points needed to have slightly different functionality. So I needed to capture which URL was used to enter the method. What I ended up doing was the following:
[OperationContract]
[WebGet(UriTemplate = "/root/{source}ocuments/{ids}?fields={fields}")]
DocumentCollection GetDocumentsById(string source, string ids, string fields);
Both URLs:
/root/document/{ids}?fields={fields}
/root/externaldocument/{ids}?fields={fields}
map to the same URL template, and thus I needed to have only a single entry with a single UriTemplate in my interface.
The "source" input parameter captures either "d" if the second segment is "documents or "externald" if the second segment is "externaldocuments". Thus by inspecting this input parameter, the method can react appropriately, depending upon which URL was used to reach the method.
Note that I could not use the following for the UriTemplate:
[WebGet(UriTemplate = "/root/{source}documents/{ids}?fields={fields}")]
because in this case, the incoming URL
/root/document/{ids}?fields={fields}
would not match the template, even though the template matches if an empty string ("") is used for the source input parameter. Apparently the UriTemplate matching algorithm requires there to be at least one character in a parameter capturing group for there to be a match.