Code that updates tiles needs to run as quickly as possible, otherwise you'll run out of draw time.
So you would store two copies of the rain tile, and redraw it from a different Y origin each frame. You need two copies because otherwise you'd be reading from out-of-bounds places as you index further into your tile.
Here is some example code for how to update a tile. For this, I'm using GAMEBOY FORMAT tiles instead of NES format, because it makes handling the second bit plane much easier. ("Gameboy format" means that you store the second byte of a row immediately after the first byte of a row)
CopyTile:
\t;X register = scroll position (times 2)
\t;set the PPU address before you call this
\tlda MyTile+0,X
\tsta $2007
\tlda MyTile+2,X
\tsta $2007
\tlda MyTile+4,X
\tsta $2007
\tlda MyTile+8,X
\tsta $2007
\tlda MyTile+10,X
\tsta $2007
\tlda MyTile+12,X
\tsta $2007
\tlda MyTile+14,X
\tsta $2007
\tlda MyTile+1,X
\tsta $2007
\tlda MyTile+3,X
\tsta $2007
\tlda MyTile+5,X
\tsta $2007
\tlda MyTile+7X
\tsta $2007
\tlda MyTile+9,X
\tsta $2007
\tlda MyTile+11,X
\tsta $2007
\tlda MyTile+13,X
\tsta $2007
\tlda MyTile+15,X
\trts
If you don't need a second plane, you can get by with updating only 8 bytes instead of 16, then you won't need to bother with the second bitplane stuff.
That code you posted was an example of how to replace a tile with a blank FF or 00 tile, and wouldn't do anything else.