Indeed, it does appear that git diff does pass down its arguments to sub-commands. It's not necessarily always true per se, however, if git diff is masking another command, it is a fairly safe assumption to bet that the arguments are passed down.
However, it looks like in the particular case of -i for a -G flag (or even -S) being provided, the sub-command it is getting passed down to, Git pickaxe (pseudo Grep?), didn't have the option documented or explained at all in its documentation / CLI.
I decided to spend time actually reading Git's source code in depth rather than perusing it quickly and skimming for keyword terms. When digging into the source code Git itself, it looks like my overall assumption is indeed correct. The git diff command does indeed pass down its arguments to sub-commands. For example, we see it in the following line of code when using -G or -S:
void diffcore_std(struct diff_options *options)
{
    ...
    if (options->pickaxe_opts & DIFF_PICKAXE_KINDS_MASK)
        diffcore_pickaxe(options);
    ...
}
Furthermore, inside of the pickaxe sub-command, we see how those options are utilized (and where -i is being checked for):
void diffcore_pickaxe(struct diff_options *o)
{
    const char *needle = o->pickaxe;
    int opts = o->pickaxe_opts;
    
    ...
    if (opts & (DIFF_PICKAXE_REGEX | DIFF_PICKAXE_KIND_G)) {
        int cflags = REG_EXTENDED | REG_NEWLINE;
        if (o->pickaxe_opts & DIFF_PICKAXE_IGNORE_CASE)
            cflags |= REG_ICASE;
    ...
}
With the relevant macros for the masks, defined in diff.h:
#define DIFF_PICKAXE_KIND_S 4 /* traditional plumbing counter */
#define DIFF_PICKAXE_KIND_G 8 /* grep in the patch */
#define DIFF_PICKAXE_KIND_OBJFIND   16 /* specific object IDs */
#define DIFF_PICKAXE_KINDS_MASK (DIFF_PICKAXE_KIND_S | \
                 DIFF_PICKAXE_KIND_G | \
                 DIFF_PICKAXE_KIND_OBJFIND)
#define DIFF_PICKAXE_KINDS_G_REGEX_MASK (DIFF_PICKAXE_KIND_G | \
                     DIFF_PICKAXE_REGEX)
#define DIFF_PICKAXE_KINDS_ALL_OBJFIND_MASK (DIFF_PICKAXE_ALL | \
                         DIFF_PICKAXE_KIND_OBJFIND)
#define DIFF_PICKAXE_IGNORE_CASE    32
In essence, the issue appears to be undocumented behavior that is undefined on the git diff CLI and/or the git pickaxe CLI. Since I have no idea how Git's internal development works, I cannot make a patch or submit an issue for it (odds are good, since its a Linus Torvalds project, it's stuck in the 1990's development workflow model with ad-hoc patches?). Hopefully someone who works on Git and knows how that process is done, will see this thread and make the appropriate documentation updates (thank you to whomever that is, in advance).