For the holes -
Do you have access from below the floor? If so, I'd patch the underside, then use self-leveling floor compound on top. Alternatively, you could just put a 1/4" layer of lauan over the entire floor
For minor dips in the floor -
Use shingles to fill the dents (heard this tip from a home improvement show, but never tried it)
For areas that really low -
patch with plywood of the appropriate thickness, cut a little smaller than the low area, then use compound around the edge of the patch to extend it to the surrounding level floor.
In profile your patch would look like this (hope this diagram will make sense)
____ _______ ________
floor at normal height
Fill the dip surrounding the patch with compound.