Index: subversion/libsvn_wc/update_editor.c
===================================================================
--- subversion/libsvn_wc/update_editor.c	(revision 32423)
+++ subversion/libsvn_wc/update_editor.c	(working copy)
@@ -207,6 +207,9 @@
      used for filtering; we have a separate wrapping editor for that. */
   svn_depth_t ambient_depth;
 
+  /* Was the directory marked as incomplete before the update? */
+  svn_boolean_t was_incomplete;
+
   /* The pool in which this baton itself is allocated. */
   apr_pool_t *pool;
 };
@@ -437,8 +440,9 @@
   d->log_number   = 0;
   d->log_accum    = svn_stringbuf_create("", pool);
 
-  /* The caller of this function needs to fill this in. */
+  /* The caller of this function needs to fill these in. */
   d->ambient_depth = svn_depth_unknown;
+  d->was_incomplete = FALSE;
 
   apr_pool_cleanup_register(d->pool, d, cleanup_dir_baton,
                             cleanup_dir_baton_child);
@@ -1037,7 +1041,10 @@
       SVN_ERR(svn_wc_entry(&entry, d->path, eb->adm_access,
                            FALSE, pool));
       if (entry)
-        d->ambient_depth = entry->depth;
+        {
+          d->ambient_depth = entry->depth;
+          d->was_incomplete = entry->incomplete;
+        }
 
       /* Mark directory as being at target_revision, but incomplete. */
       tmp_entry.revision = *(eb->target_revision);
@@ -1487,6 +1494,7 @@
       svn_boolean_t prop_conflicted;
 
       db->ambient_depth = entry->depth;
+      db->was_incomplete = entry->incomplete;
 
       SVN_ERR(svn_wc_conflicted_p(&text_conflicted, &prop_conflicted,
                                   db->path, entry, pool));
@@ -1574,12 +1582,29 @@
 }
 
 static svn_error_t *
+add_prop_deletion(void *baton, const void *key,
+                  apr_ssize_t klen, void *val,
+                  apr_pool_t *pool)
+{
+  apr_array_header_t *propchanges = baton;
+  const char *name = key;
+  svn_prop_t *prop = apr_array_push(propchanges);
+
+  /* Add the deletion of NAME to PROPCHANGES. */
+  prop->name = name;
+  prop->value = NULL;
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
 close_directory(void *dir_baton,
                 apr_pool_t *pool)
 {
   struct dir_baton *db = dir_baton;
   svn_wc_notify_state_t prop_state = svn_wc_notify_state_unknown;
   apr_array_header_t *entry_props, *wc_props, *regular_props;
+  apr_hash_t *base_props = NULL, *working_props = NULL;
   svn_wc_adm_access_t *adm_access;
 
   SVN_ERR(svn_categorize_props(db->propchanges, &entry_props, &wc_props,
@@ -1588,6 +1613,34 @@
   SVN_ERR(svn_wc_adm_retrieve(&adm_access, db->edit_baton->adm_access,
                               db->path, db->pool));
 
+  /* An incomplete directory might have props which were supposed to be
+     deleted but weren't.  Because the server sent us all the props we're
+     supposed to have, any previous base props not in this list must be
+     deleted (issue #1672). */
+  if (db->was_incomplete)
+    {
+      int i;
+      apr_hash_t *props_to_delete;
+
+      SVN_ERR(svn_wc__load_props(&base_props, &working_props, NULL,
+                                 adm_access, db->path, pool));
+
+      /* Calculate which base props weren't also in the incoming
+         propchanges. */
+      props_to_delete = apr_hash_copy(pool, base_props);
+      for (i = 0; i < regular_props->nelts; i++)
+        {
+          const svn_prop_t *prop;
+          prop = &APR_ARRAY_IDX(regular_props, i, svn_prop_t);
+          apr_hash_set(props_to_delete, prop->name,
+                       APR_HASH_KEY_STRING, NULL);
+        }
+
+      /* Add these props to the incoming propchanges. */
+      SVN_ERR(svn_iter_apr_hash(NULL, props_to_delete, add_prop_deletion,
+                                regular_props, pool));
+    }
+
   /* If this directory has property changes stored up, now is the time
      to deal with them. */
   if (regular_props->nelts || entry_props->nelts || wc_props->nelts)
@@ -1653,7 +1706,7 @@
           SVN_ERR_W(svn_wc__merge_props(&prop_state,
                                         adm_access, db->path,
                                         NULL /* use baseprops */,
-                                        NULL, NULL,
+                                        base_props, working_props,
                                         regular_props, TRUE, FALSE,
                                         db->edit_baton->conflict_func,
                                         db->edit_baton->conflict_baton,
Index: subversion/tests/cmdline/update_tests.py
===================================================================
--- subversion/tests/cmdline/update_tests.py	(revision 32426)
+++ subversion/tests/cmdline/update_tests.py	(working copy)
@@ -3990,7 +3990,7 @@
               update_accept_conflicts,
               eof_in_interactive_conflict_resolver,
               update_uuid_changed,
-              XFail(restarted_update_should_delete_dir_prop),
+              restarted_update_should_delete_dir_prop,
              ]
 
 if __name__ == '__main__':
