Jag tror inte include() gör det du tror att den gör. Ditt regex funkar bevisligen, eftersom det byter ut module-taggarna mot Modul: "det som står mellan taggarna".
include() inkluderar och evaluerar sitt argument när den anropas. Det betyder alltså att all kod i din inkluderade fil körs när du inkluderar den. Som jag förstår ditt inlägg vill du att den matchade strängen ska bytas ut mot innehållet i filen. Då är include() fel val. Får jag föreslå nedanstående lösning på ditt problem?
Kod:
$page['content'] = preg_replace('%<module>(.*?)</module>%', file_get_contents('./Modules/' . $1 . '/index.php'), $page['content']);
Självklart bör du lägga till riktig felkontroll i koden, men det tror jag att du vet.