Is -blocknotify triggered during catch-up?
Yes, this is by design.

The notify action is run in the function BlockNotifyCallback (init.cpp), and you can see:

static void BlockNotifyCallback(bool initialSync, const CBlockIndex *pBlockIndex)
{
    if (initialSync || !pBlockIndex)
        return;
    // ...
}


The initialSync argument comes from the return value of IsInitialBlockDownload() (in validate.cpp).  It checks several things to determine if the initial block download is ongoing.  Probably the operative one here is a check whether the most recent known block has a timestamp that is more than 24 hours earlier than the current system time.

So it appears you will start getting notifications when you are 24 hours behind or less.