After you run bed.g, assuming that you have set the Z probe trigger height correctly in G31, the Z=0 point should be correct at the three probe points you used in bed.g. However, if the bed isn't flat or the gantry sags, then Z=0 may not be correct at bed centre, which is more important. Have you tried running G32 to level the bed, then checking whether at bed centre the Z=0 level is correct?
In your bed.g file, after the final G30 command with the S parameter, you may wish to move the probe over bed centre and do a single G30 probe, in order to reset the Z=0 level at that point.