Based on the equation used to calculate an annuity I'd say you are passing either 0 for the number of periods per year or 0 for the interest rate and thus getting a divide by zero error.
You are checking that PaymentNumber is greater than zero, but PaymentNumber is not used in your IPmt calculation so maybe you are using the wrong field in the calculation?
Anyway, regardless of that, you need to be aware IIF is not a statement, it is a function that gets passed two parameters. Therefore those two parameters are evaluated prior to the function call and thus BOTH sides of the "if statement" get evaluated. This can be confusing because you will still get divide by zero errors when you are checking your divisor is non-zero. Just remember it is a function, not a statement, and so there is no short-circuit evaluation to prevent the erroneous part from being executed. However, there are workarounds, mostly involving doing two IIF calls to remove the zero value from being used in the division calculation:
=IIF(Fields!DivideBy.Value <> 0, Fields!Something.Value / IIF(Fields!DivideBy.Value <> 0, Fields!DivideBy.Value, 1), 0)