Can I perform an action when a file is saved or loaded?
We can register handlers that will be executed before, or after, specific operations. The handler lists are all in bpy.app.handlers, and looking at your requirement, the handler list to use is save_pre (executed before saving) and load_post (executed after loading).

The function needs to be persistent, so they won't disappear every time a new file is loaded. Here's an example of how to register it, edited from my own addon needing such feature:

import bpy
from bpy.app.handlers import persistent

@persistent
def hair_reduce(dummy):
    print('hair_reduce')

@persistent
def hair_apply(dummy):
    print('hair_apply')

def register():
    if not hair_apply in bpy.app.handlers.load_post:
        bpy.app.handlers.load_post.append(hair_apply)
    if not hair_reduce in bpy.app.handlers.save_pre:
        bpy.app.handlers.save_pre.append(hair_reduce)

def unregister():
    if hair_apply in bpy.app.handlers.load_post:
        bpy.app.handlers.load_post.remove(hair_apply)
    if hair_reduce in bpy.app.handlers.save_pre:
        bpy.app.handlers.save_pre.remove(hair_reduce)