Index: src/bp-xprofile/bp-xprofile-functions.php
===================================================================
--- src/bp-xprofile/bp-xprofile-functions.php
+++ src/bp-xprofile/bp-xprofile-functions.php
@@ -842,9 +842,19 @@
  * @since 1.0.0
  *
  * @param int $user_id The ID of the deleted user.
+ * @return int Number of fields deleted.
  */
 function xprofile_remove_data( $user_id ) {
-	BP_XProfile_ProfileData::delete_data_for_user( $user_id );
+	global $wpdb;
+	$bp = buddypress();
+
+	$field_ids = $wpdb->get_col( $wpdb->prepare( "SELECT field_id FROM {$bp->profile->table_name_data} WHERE user_id = %d", $user_id ) );
+
+	foreach ( $field_ids as $field_id ) {
+		xprofile_delete_field_data( $field_id, $user_id );
+	}
+
+	return count( $field_ids );
 }
 add_action( 'wpmu_delete_user',  'xprofile_remove_data' );
 add_action( 'bp_make_spam_user', 'xprofile_remove_data' );
Index: src/bp-xprofile/classes/class-bp-xprofile-profiledata.php
===================================================================
--- src/bp-xprofile/classes/class-bp-xprofile-profiledata.php
+++ src/bp-xprofile/classes/class-bp-xprofile-profiledata.php
@@ -674,14 +674,10 @@
 	 * @since 1.0.0
 	 *
 	 * @param int $user_id User ID to remove data for.
-	 * @return false|int
+	 * @return int
 	 */
 	public static function delete_data_for_user( $user_id ) {
-		global $wpdb;
-
-		$bp = buddypress();
-
-		return $wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->profile->table_name_data} WHERE user_id = %d", $user_id ) );
+		return xprofile_remove_data( $user_id );
 	}
 
 	/**
Index: tests/phpunit/testcases/xprofile/class-bp-xprofile-profiledata.php
===================================================================
--- tests/phpunit/testcases/xprofile/class-bp-xprofile-profiledata.php
+++ tests/phpunit/testcases/xprofile/class-bp-xprofile-profiledata.php
@@ -419,6 +419,26 @@
 		$this->assertEquals( $expected, BP_XProfile_ProfileData::get_all_for_user( $u ) );
 	}
 
+	/**
+	 * @ticket BP8388
+	 * @group xprofile_remove_data
+	 */
+	public function test_cache_invalidated_when_xprofile_remove_data_called() {
+		$u = self::factory()->user->create();
+		$g = self::factory()->xprofile_group->create();
+		$f = self::factory()->xprofile_field->create( array(
+			'field_group_id' => $g,
+		) );
+
+		xprofile_set_field_data( $f, $u, 'Foo' );
+		// Prime the cache.
+		xprofile_get_field_data( $f, $u );
+		xprofile_remove_data( $u );
+
+		$d = new BP_XProfile_ProfileData( $f, $u );
+		$this->assertFalse( $d->exists() );
+	}
+
 	public function filter_time() {
 		return $this->last_updated;
 	}
