Question 1:
(what’s the difference between them?):
All attributes starting with »layout_« are hints for the ViewGroup the View is part of. For this each android.view.ViewGroup has a set of LayoutParams. The widget itself does not use them.
The android:height parameter is the initial size of the android.view.View. But if the View is part ViewGroup then the ViewGroup will resize the objet according to its layout rules.
BTW: newer APIs have a new android:minHeight and android:maxHeight attribute to clarify programmers intent.
Note that if you don’t set android:height the view will calculate the size itself. Which is right thing to do most of the time.
Question 2
(when should one be used over the other?):
ViewGroup is abstract — the answer to this question depends which actual child class you are using.
Note that WRAP_CONTENT tells the to use ViewGroup to use android:height. Which means that this is the correct parameter to be used in your example.
Question 3
(does the use of one affect the use of the other?):
Yes — and recursively . TableLayout will read and write the android:width attribute to find out the widest object and resized all other object to it.
Question 4
(does the use of one have implications over other attributes which can control the measured dimensions of a view, like padding or margin?)
No for android:padding but yes for android:layout_margin. Note that margins are a layout parameter and not every layout manager supports margins.
See margin vs padding for details.
Final words:
It is easier to consider all width and height attributes to be hints only. The final say of the size of an object has the layout manager of the used ViewGroup.