The limits of area of integration defined in xl and xu are way, way, out in the tails of the density function, which may be why mvncdf is having an issue.
As I understand mvncdf ...let p(x1,x2) be the joint density. Then mvncdf computes the probability, P, given by:
P = int(int(p,x1,xl(1),xu(1)),x2,xl(2),xu(2))
First, let's take a look at the pdf as defined by the parameters in the question
cov = [0.0030 0.0922; 0.0922 2.8597];
Now, redraw but with a rectangle showing the area of integration:
As you can see, the area of integration is way out there. I don't know why mvncdf returns NaN in this case instead of zero, but it probably has something to do with trying to integrate a function with incredibly small values.
Now try with a more reasonable area of integration
The probability is:
which seems pretty reasoable.
Also, I don't think that mvncdf(xu, mu, cov) - mvncdf(xl, mu, cov) is equivalent
mvncdf(xupper, mu, cov) - mvncdf(xlower, mu, cov)
because it includes area outside of the red rectangle, particularly the light blue region where x1 > 0.4 and x2 < 13.
[X1,X2] = meshgrid(x1,x2);
p = reshape(p,length(x2),length(x1));
rectangle('Position',[xlower(1) xlower(2) xupper(1)-xlower(1) xupper(2)-xlower(2)],'EdgeColor','r');