MIDI stands for 'Musical Instrument Digital Interface'. Simply put, MIDI is a control language that uses a standardised format for universal compatibility across a wide variety of systems. Essentially, MIDI uses a series different numbers in each action - note on, note pitch, note velocity, note channel and (sometimes) note off. So, it would say (in a numerical format) something along the lines of:
'On MIDI Channel 1, play note #60 (Middle C), at velocity 127 (maximum volume) and then stop.'
Of course, MIDI being entirely numerical, it can be used to control a whole load of other stuff OTHER than just notes. Essentially, all MIDI is is a language. These signals are then processed by other devices (such as the standard audio on a keyboard or recording software) and manipulated accordingly, often to produce sounds, but sometimes to control OTHER parameters such as a slider volume. I use MIDI notes numbers to trigger events on software rather than playing notes, but MIDI is literally just a stream of numbers.
So, if a keyboard were to say 'MIDI Compatible' it means that it complies to the MIDI standard and can be used with any other device that is MIDI compatible. All modern drum modules are MIDI compatible and all use the same basic language, so if you were to use a trigger pad from one electronic drum kit, you could use it with any other and you could also use that trigger pad to work with other devices. For instance, I could set up a pad to play a sound sample at whatever velocity I desired based on my strike, or I could set it up so that when I struck the pad, a blue light switched on - as long as it can all understand MIDI, which a lot of the time, it does.
A MIDI controller is a device that sends MIDI signals, but (often) has no internal memory of its own, so it relies on other devices to provide the output. MIDI controller keyboards trigger events in (often) software or (sometimes) dedicated hardware. As long as the two speak the same language, they will understand each other. The fun comes in when you start mucking around with MIDI as a control language for more complex work - literally hours of fun I've had with automating virtual mixing desks I've written in crazy software (Max/MSP). Standalone keyboards that are MIDI compatible have their own memory and so trigger a sound internally, but you can often still send the MIDI signal off independently of the internal processing.
If you don't mind a heavy read, try this.
Incidentally, I'm getting into the newer Open Sound Control language since I got hold of my Monome clone...
Hope that is of some help.