This is a sample of where Orleans "transaction engine" consistently fails, depending on how you set timing in the execution path.
The sample initially fails with "normal" execution path, where there is no delay when running.
The transaction succeeds when changing the delay to maybe 100ms or more, but will take some additional time to execute due to delays in the transaction handling by Orleans.
The topmost exception in the sample is OrleansTransactionAbortedException. The documentation states that the transaction can be retried when OrleansTransactionAbortedException is detected; but the retry is failing, with ensured correct data [for the test], depending on timing, as the sample illustrates.