Can't use Boolean Intersect on two meshes
You need a manifold (watertight) mesh for the boolean operation to work. Try replacing the plane with a cube:

 

Another option is the Bisect tool:


In edit mode, press Bisect in Tool Shelf (N) > Add:


Then draw the bisection line with LMB and drag:


Enable Clear inner or Clear outer (in the Redo menu at the bottom of the Tool shelf, or the F6 menu) to remove one side of the mesh as defined by the bisection line (also enable Fill to fill the hole):




If you want to keep both sides of the bisect cut as separate objects, you could try either of the following:


Manually separating the bisected parts of the model:


Bisect the mesh without enabling Fill or either Clear option, so it only makes a cut down the bisection line (the same as if you had used the knife tool):


Select one side of the mesh with Select Loop Inner-Region in 3D view > Header > Select > Select Loop Inner-Region:


Press PSeparate > Selection:




This will give you two objects, one for each side of the bisect operation.


To fill in the hole, you could select the edge loop on the very edge with AltRMB and fill (F), however if the bisect line goes across any interfering geometry this will not work. (This might also be too limited for meshes that have an internal structure)

Or you could duplicate the mesh and run two bisect operations, one on each.


Bisect one mesh and enable Fill and Clear Inner.
Pull down the info window and scroll to the bottom. You should see a line which begins like this:

 bpy.ops.mesh.bisect(

Select it with RMB and press CtrlC to copy it:


Select your duplicate mesh and enter edit mode (Tab).
Split a new area, set the editor type to Python Console and paste the selected line. Note that you may need to add use_fill=True, and clear_outer=True, in between the parenthesis ().
Press Enter. The mesh should be automatically bisected identically, except the opposite side is cleared.



Note that you can also set the exact coordinates from the UI:



So if you wanted to manually copy each value from one operation to the other, that would be another way.