I got around this issue by putting a placeholder in temporarily.
private const string TAB = " ";
private const string TAB_PLACEHOLDER = "===TAB===";
I used the placeholder to temporarily replace all of the tab characters and then once they were in the RichTextBox I replaced all of the placeholders with tabs.
textBox1.Text = richTextBox1.Xaml;
string xaml = richTextBox1.Xaml;
xaml = xaml.Replace(TAB, TAB_PLACEHOLDER);
richTextBox2.Xaml = xaml;
foreach (Block block in richTextBox2.Blocks)
{
foreach (Inline inline in ((Paragraph)block).Inlines)
{
((Run) inline).Text = ((Run) inline).Text.Replace(TAB_PLACEHOLDER, TAB);
}
}