i did it this way:
1st: Overload layout of checkout within my own module. Module is called Termsandconditions. Within config.xml i can overwrite layout of checkout.
I copied original checkout.xml and saved as termsandconditons.xml. i customized new layout like:
<block type="termsandconditions/onepage_review" name="termsandconditions.onepage.review" as="review" template="termsandconditions/onepage/review.phtml">
<block type="checkout/onepage_review_info" name="checkout.onepage.review.info" as="info" template="checkout/onepage/review/info.phtml"/>
In my example i had to create new block for my module which is located in Termsandconditions/Block/Onepage/Review.php. This Block extends the onepage review block:
class Mage_Termsandconditions_Block_Onepage_Review extends Mage_Checkout_Block_Onepage_Review
I wrote a new controller in my module which handles the data from terms and conditions and send form from my custom block to new controller:
class Mage_Termsandconditions_OnepageController extends Mage_Checkout_OnepageController
Within this controller is save date from form to user session and add the data to the order using one of the checkout events. You also have to extend eav of order
I also overload adminhtml block for orders in backend to show if terms was accepted or not.
Beware of changing code from core modules, maybe your changes will be overwritten by the next update.
Hope that helps. For any addintional questions you can pm me.
EDIT// I also changed checkout.js for onepage checkout so the place order button submit my added form.