diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
index a65f82d..2af2773 100644
--- src/bp-groups/bp-groups-functions.php
+++ src/bp-groups/bp-groups-functions.php
@@ -440,22 +440,12 @@ function groups_leave_group( $group_id, $user_id = 0 ) {
 		}
 	}
 
-	if ( ! groups_remove_member( $user_id, $group_id ) ) {
+	if ( ! groups_remove_member( $user_id, $group_id, 'leave_group' ) ) {
 		return false;
 	}
 
 	bp_core_add_message( __( 'You successfully left the group.', 'buddypress' ) );
 
-	/**
-	 * Fires after a user leaves a group.
-	 *
-	 * @since BuddyPress (1.0.0)
-	 *
-	 * @param int $group_id ID of the group.
-	 * @param int $user_id  ID of the user leaving the group.
-	 */
-	do_action( 'groups_leave_group', $group_id, $user_id );
-
 	return true;
 }
 
@@ -1427,12 +1417,14 @@ function groups_unban_member( $user_id, $group_id ) {
 /**
  * Remove a member from a group.
  *
- * @param int $user_id  ID of the user.
- * @param int $group_id ID of the group.
+ * @param int    $user_id  ID of the user.
+ * @param int    $group_id ID of the group.
+ * @param string $context  Optional. Context of removal. Default: 'remove'. If passed, this will fire
+ *                         a hook named after $context when a group member is removed succesfully.
  *
  * @return bool True on success, false on failure.
  */
-function groups_remove_member( $user_id, $group_id ) {
+function groups_remove_member( $user_id, $group_id, $context = 'remove' ) {
 
 	if ( ! bp_is_item_admin() ) {
  		// bp_is_item_admin may not be set if this function is called outside of group context.
@@ -1447,17 +1439,41 @@ function groups_remove_member( $user_id, $group_id ) {
 
 	$member = new BP_Groups_Member( $user_id, $group_id );
 
-	/**
-	 * Fires before the removal of a member from a group.
-	 *
-	 * @since BuddyPress (1.2.6)
-	 *
-	 * @param int $group_id ID of the group being removed from.
-	 * @param int $user_id  ID of the user being removed.
-	 */
-	do_action( 'groups_remove_member', $group_id, $user_id );
+	// Backward compatibility hook.
+	if ( 'remove' === $context ) {
+		/**
+		 * Fires before the removal of a member from a group.
+		 *
+		 * @todo We should deprecate this and direct devs to use the
+		 *       'groups_member_before_remove' hook instead.
+		 *
+		 * @since BuddyPress (1.2.6)
+		 *
+		 * @param int $group_id ID of the group being removed from.
+		 * @param int $user_id  ID of the user being removed.
+		 */
+		do_action( "groups_remove_member", $group_id, $user_id );
+
+	}
+
+	$retval = $member->remove();
+
+	if ( false !== $retval && ! empty( $context ) && 'remove' !== $context ) {
+		/**
+		 * Dynamic hook that fires after a group member is removed successfully.
+		 *
+		 * Hook name is derived from the $context parameter.
+		 *
+		 * @since 2.4.0
+		 *
+		 * @param int $group_id ID of the group being removed from.
+		 * @param int $user_id  ID of the user being removed.
+		 */
+		do_action( "groups_{$context}", $group_id, $user_id );
+
+	}
 
-	return $member->remove();
+	return $retval;
 }
 
 /** Group Membership **********************************************************/
