> I'm new to ruby so perhaps I'm simply doing this wrong, but...

This is more of a Windows thing than a Ruby thing.
 
>      File.new(TEST_FILE_1,File::CREAT,0666)

Underneath the covers this opens a handle to the file.  Until that
handle is closed, no one else can do anything to it.  The GC will
eventually get it.  But probably not before your call to rm_rf
 
>      system("ruby -e 'File.new(\"" + TEST_FILE_2 + "\",File::CREAT)'")

This works because when the process ends, the Ruby GC is probably
called.  If it isn't, then Windows will clean up the misbehaving
process.

-- 
Justin Rudd
http://seagecko.org/thoughts/