Попробуйте строки
X++:
decimal price = ((SDK::CrmMoney)currentPrice.Properties["price"]).Value;
if (((SDK::CrmMoney)currentPrice.Properties["price"]) == null)
price = 0;
поменять на
X++:
decimal price = 0;
if (currentPrice.Properties->Contains("price"))
price = ((SDK::CrmMoney)currentPrice.Properties["price"]).Value;
По поводу вызова метода - Contains если ошибся с синтаксисом - поправьте. Всё таки на C# пишу.