memcpyで描画していた部分を修正して1ドットずつ描きこんだらうまくいきました。
ただ、BG_BMP_BASE(n)とBG_BMP_RAM(n)の意味でよくわからないところがあります。

定義では

#define BG_BMP_BASE(base) ((base) << 8)
#define BG_BMP_RAM(base) (((base)*0x4000) + 0x06000000)

となっているのですが、BG_BMP_BASEは0x06000000を基準に(base)<<8した位置を
BGxで使用する、という意味なのでしょうか?
そうなると、BG_BMP_BASE(n)のnと、BG_BMP_RAM(n)のnを同じにするのではなく、
上記の定義からアドレスを計算して、二つのアドレスが一致するように設定すれば
よいということでしょうか?

今は同じnを使用してうまくいっているのですが、アドレスをあわせようと、

BG_BMP_BASE(64) = 64<<8 = 0x4000, BG_BMP_RAM(1) = 1*0x4000+0x06000000

にしたのですが、こうすると逆に背景が少し下にずれて描画されてしまいました。