I've found a solution pretty simple.
$block = $result->getLayout()->setData(['test'=> 'Content here'])->getBlock('category.description');
Then my blank.phtml:
<?php print_r($this->getData()) ?>
It prints: Array ( [test] => Content here [module_name] =&...
You need to build objects which you then pass through to email templates.
If it's a custom template then it's going to be custom code passing the variables.
As i see a problem with cms block associated with the method \Experius\DonationProduct\Block\Donation\ListProduct::getIdentifier.
The problem is that when we get the block name in cms, we get a name that contains an element "\" that can not be properly processed. Please try change method getIdentifier for that
return str_replace('\\', '-', parent::...