Seu palpite está provavelmente correto.
O número "free memory" fornecido pelo top não inclui o que é usado para o cache ou buffers do sistema de arquivos. A memória alocada para o cache do sistema de arquivos é gratuita, pois, se um processo precisar de algum, ele poderá ser facilmente disponibilizado, mas o top não mostrará isso.
free -m
lhe dará uma idéia melhor da quantidade de memória que seus processos estão realmente usando (em MB), na linha "- / + buffers / cache".
É claro que ainda não é igual a seus cálculos com base na saída de ps exatamente, porque calcular o uso da memória no Linux é complicado, especialmente em torno da memória compartilhada.
No exemplo a seguir, 1287MB é muito mais preciso como uma exibição de memória livre do que 31MB.
$ free -m
total used free shared buffers cached
Mem: 2002 1970 31 0 48 1207
-/+ buffers/cache: 714 1287
Swap: 1027 3 1023