Very weird bug: Ajax for non-admins

Just another suggestion you could try. Rather than doing a separate AJAX call, could you just send it to your script via wp_localize_script? I’m not sure if that would have any effect on your particular bug, but it’s worth a shot?

// Make data accessible to scripts
  wp_localize_script( 'my-script-handle', 'ajax_data', array( 
    'ajaxurl' => admin_url( 'admin-ajax.php' ),
    // ...other variables
    'user_email' => get_user_email(),
    // ...other variables
  ));