How do I hide one block and show another in a template My page.tpl.php is set to use a particular block in the right-hand column.

However, I have one template page (created by a module) in which I don't want to display this block.

How can I hide the block ONLY on that page and show a different block instead?
Each block can have various visibility settings. Among others, you can configure that a block should only show up on a number of pages or everywhere except on a number of pages.

So go to the blocks administration page, click on the configure link for that block then make sure "All pages except those listed" is selected and insert the path for which you want to hide it. You can also use wildcards for something like "forum/*", which would hide the block when viewing a forum page.