me parece que se debe ejecutar el primer código justo después de poblar la lista, puede ser algo así:
Código Javascript
:
Ver original$(document).ready(function(){
$.getJSON("consulta_materias.php",function(materias){
for(var i=0; i<=(materias.length)-2; i=i+2){
$("#ul_todas").append("<li id='li"+materias[i]+"'>"+materias[i+1]+"<input type='button' value='Agregar' id='"+materias[i]+"' /></li>");
}
$("input:button").button().click(function(){
var a=$(this).attr("id");
$("#li"+a)
.remove()
.appendTo("#ul_seleccion");
});
});
});