i believe because of what jquery .cycle() is doing, you are always going to get wonky results attacking the problem this way. my first thought is to do the calculations for all of the list items on jquery document ready and set each of their margin-tops immediately after DOM load. hence trying to resolve this issue with initial CSS rather then relying on calling a function at / before / or as a callback of each jquery .cycle call.
this approach should yield more stable results. ill see if i can get a fiddle up in a few.
EDIT: here is your modified jquery working for me in a fiddle here with no glitch-y functionality or other issues like the example you provided. enjoy
(function ($) {
$.fn.vAlign = function(fn) {
return this.each(
function(i){
var ah = $(this).height();
var ph = $(this).parent().height();
var mh = Math.ceil((ph-ah) / 2);
$(this).css('margin-top', mh);
});
};
})(jQuery);
$(document).ready(function(){
$(".slidah li img").vAlign();
});
$('.slidah').cycle({});