In case anyone would like to know, I worked around this problem by massaging the dataset of changes to remove any child records whose parent was also deleted before I submit it to UpdateDataset(). It still surprises me a bit that such an approach would be required ... I'd have expected the DAAB to have provided some level of built-in support for what seems like a relatively common operation.