Index: src/bp-core/bp-core-filters.php
===================================================================
--- src/bp-core/bp-core-filters.php	(revision 12272)
+++ src/bp-core/bp-core-filters.php	(working copy)
@@ -1035,7 +1035,7 @@
  */
 function bp_email_set_default_tokens( $tokens, $property_name, $transform, $email ) {
 	$tokens['site.admin-email'] = bp_get_option( 'admin_email' );
-	$tokens['site.url']         = home_url();
+	$tokens['site.url']         = bp_get_root_domain();
 	$tokens['email.subject']    = $email->get_subject();
 
 	// These options are escaped with esc_html on the way into the database in sanitize_option().
@@ -1082,7 +1082,19 @@
 	// Email preheader.
 	$post = $email->get_post_object();
 	if ( $post ) {
+		$switched = false;
+
+		// Switch to the root blog, where the email post lives.
+		if ( ! bp_is_root_blog() ) {
+			switch_to_blog( bp_get_root_blog_id() );
+			$switched = true;
+		}
+
 		$tokens['email.preheader'] = sanitize_text_field( get_post_meta( $post->ID, 'bp_email_preheader', true ) );
+
+		if ( $switched ) {
+			restore_current_blog();
+		}
 	}
 
 	return $tokens;
