The dynamic keyword also adds some overhead to your execution time, due to all the extra logic used - so if you don't need the dynamic runtime or interop and can get away with using object your code will be more efficient.
More information on the dynamic keyword can be found in Jeff Richter's book: CLR via C#, 3rd Edition
Sam Gentile did a couple of posts about the details too:
- C# 4.0/BCL 4 Series:Dynamic Primitive Type Part 1
- C# 4.0/BCL 4 Series:Dynamic Primitive Type Part 2