When limiting the match count to 1, the input offset is correctly restored before grep exits, no matter the output:
$ { grep -m1 . >/dev/zero; head -n1; } < txt
0000001
$ { grep -m1 . >/dev/null; head -n1; } < txt
0000001
If the count is 2 or higher, this also works, unless the output is being discarded to /dev/null -- in this case not only is the input offset not restored, but the entire file is consumed:
$ { grep -m2 . >/dev/zero; head -n1; } < txt
0000002
$ { grep -m2 . >/dev/null; head -n1; } < txt
$