It is actually somewhat of a challenge to spend pre fork coins on one fork only. A fork is caused by some of the network using an alternate chain (of blocks). Transaction which are not yet in a block would be relayed by nodes on each fork unless the tx is invalid on that fork.
One way to make a tx invalid on one fork is to include newly minted coins which can only exist on one side of the fork (because the other side has a different block and thus different coins).
If the two forks are communicating with each other (and a transaction that is sent on one fork gets automatically broadcast to both forks) then you're right, one good way to make a transaction invalid on one fork (and double your coins) is to include in the first of the two transactions coins that are minted after the split.
On the other hand, if the fork includes changes that prevent the average "reference" node from broadcasting transactions between the two forks, you can use your two clients (one from each fork of the source code) and create two separate addresses of your own (one in each client). Then use each client to send the entire balance to your new address on each fork. Once each transaction gets confirmed in its respective fork, you'll have an output in each fork that is completely incompatible with the other fork. As such, you'll be able to spend your bitcoins completely separately on each fork.