Finally I have mastered the problem. I studied Dynamic.cs and found that the Dynamic LINQ's syntax is very specific. Particularly the string expression "SomeType(SomeExpression)" generates cast expression only if SomeType has no constructor with one parameter. In other case it generates "new SomeType(SomeExpression)". I considered it as a mistake and slightly modified the Dynamic.cs.
Now in my example the cast can be made as 'Int64? Person.Id'. It is not a "normal" cast syntax but it works for me like a charm. Dynamic ExpressionParser is pretty good but unfortunately is not well adapted for C# cast syntax.
Also I registered in Dynamic.cs short type names like "long", "int" etc.
The modified source is downloadable here: http://1drv.ms/1cRJtSP .