A expressão regular não está ancorada, portanto, é livre combinar os primeiros 1 ou dois números e "ter sucesso", deixando os números finais (com êxito) sem correspondência.
Se você precisar de números de 1 ou 2 dígitos, ancore o regex:
'^-?([0-9]|([1-9][0-9]))$'
Alguns exemplos:
$ seq -100 -99 | grep -E '^-?([0-9]|[1-9][0-9])$'
-99
$ seq 99 100 | grep -E '^-?([0-9]|[1-9][0-9])$'
99
$ seq -9 9 | grep -E '^-?([0-9]|[1-9][0-9])$'
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9
$ seq -2231 -100 | grep -E '^-?([0-9]|[1-9][0-9])$'
(empty)