The problem is that your code is very simplistic: you find the first match and go with it. which really won't work. Instead of processing each character individually though the string, you need to process the list of valid replacements instead, and that means that you need to introduce an order to your list as well. For example, you need to process all the examples of "aa" in your string before you start looking at any examples of "a", or the later will always get precedence.
For example, what you need to do is along the lines of:
string s = characters.ToSting();
s = s.Replace("aa", "\u0B86"");
s = s.Replace("a", "\u0B85");
I think you need to sit down and rethink, because a dictionary is not a good choice for this - the order of values is determined by the order in which you insert them, and you need control over the ordering of your commands.
BTW: It is a very bad practice to rely on try catch for normal processing - it is very expensive in processing time compared to checking for problems before you try the code.