Boxing and casting are very similar. When you cast a "value type" item (like an integer, double, or even a structure which lives on what is known as the stack) into an "object type" item (like Object) that lives on the heap, you are boxing. Example...
CODE
// We declare an instance of a car "structure"
MyCar aCar = new Car();
// Take our value aCar and box it up into an "object" called oCar.
// oCar is now an object that lives on the heap. (implicit cast from MyCar to Object type)
Object oCar = new aCar;
// To unbox it, we cast it back to MyCar explicitly
MyCar hisCar = (MyCar)oCar;
So in short, boxing/unboxing is the process of casting from value types to reference types and vice versa. Where would you find most of this done? In something like a for each loop. Where you could box up different data types like integers, doubles, floats into their own Object, store it in an array and the for each could loop through the objects not knowing exactly what they contain. To the loop and array, they are all simply objects.
Hope that helps clear things up.