「バッファをバインドするんだな」と、納得したフリをしていたけれど……。
具体的に何が起こっているのかはよく分からない。

glBindBuffer関数について深く考えるきっかけになったのは、VBOやPBOについて勉強してる時でした。
glBindBuffer関数の有無によって、glVertexPointer関数やglReadPixels関数の引数の意味が変わっている。
例えば、VBOなしのVertexArray(glBindBuffer関数なし)ではglVertexPointer関数の第四引数が配列の先頭ポインタなのに対して、VBOにおけるVertexArray(glBindBuffer関数あり)ではVBO内のオフセットに変わっている。
http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?OpenGL%20-%20VBO

これはいったいどういうことなんだろう。
そんな疑問を解決したいと思って色々考えてみました。

結論から言うと、glVertexPointer関数などの引数として与えるポインタは、「バインドされているバッファの先頭アドレスからのオフセット」であり、バッファがバインドされていない場合に特例として、アドレス0からのオフセットと解釈されるようです。
以下、解説していきます。

まず、glBindBuffer(target, bufferId)の引数から解説します。
targetはバッファの種類を表しています。
そして、glBindBuffer関数では、targetで指定したバッファ種類について「バッファとしてbufferIdのバッファを使ってね」と設定(バインド)するわけです。
以下では、具体例として、targetにGL_ARRAY_BUFFERとGL_PIXEL_PACK_BUFFERが指定された場合について説明します。

・GL_ARRAY_BUFFER(glVertexPointer, glDrawBuffer)
glVertexPointer関数で頂点配列の「バインドされているバッファの先頭からのオフセット」を指定し、glDrawBuffer関数で指定された頂点配列を描画します。
この時、バインドされているバッファがない--つまり、glBindBuffer(GL_ARRAY_BUFFER, 0)となっている場合は、アドレス0からのオフセットと解釈されます。
アドレス0からのオフセットってことはつまり、頂点配列の先頭アドレスを与えることになるわけです。

・GL_PIXEL_PACK_BUFFER(glReadPixels)
glReadPixels関数で格納先の「バインドされているバッファの先頭からのオフセット」を指定し、ピクセル情報を読み込みます。
この時、バッファがバインドされていれば、そのバッファに読み込みます。
一方、glBindBuffer(GL_PIXEL_PACK_BUFFER, 0)となっている場合は、アドレス0からのオフセットを指定する必要があるので、格納先の先頭アドレスを指定することになるわけです。