It's just another story of precision. For the first sample:
a = 2/100;
NIntegrate[BesselJ[15/2, BesselJZero[15/2, 1]*r]^2*r, {r, 0, a}, WorkingPrecision -> 40]
N[Integrate[(BesselJ[15/2, BesselJZero[15/2, 1]*r])^2*r, {r, 0, a}], 40]
(* Let's check the difference between the above two result *)
%% - %
1.187956028197538867114723184727333535080*10^-27 1.187956028197538867114723184727562859206*10^-27 -2.29324126*10^-58
For the second sample:
int2 = Integrate[BesselJ[15/2, 10^-7*r]^2*r, {r, 0, a}];
Block[{$MaxExtraPrecision = 290}, N[int2, 16]]
1.194601120645255*10^-148
To summarize, one should always keep the precision issue in mind when facing numerical calculation.